我有以下项目结构:
\n\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docs\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 examples\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 MANIFEST.in\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.rst\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.cfg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 myproject\nRun Code Online (Sandbox Code Playgroud)\n\n我想将我的项目捆绑到一个轮子中。为此,我使用以下内容setup.py:
#!/usr/bin/env python\n\nfrom setuptools import setup, find_packages\n\nsetup(name=\'myproject\',\n version=\'1.0\',\n description=\'Great project\'\n long_description=open(\'README.rst\').read(),\n author=\'Myself\'\n packages=find_packages(exclude=[\'tests\',\'test\',\'examples\'])\n )\nRun Code Online (Sandbox Code Playgroud)\n\n运行时python setup.py bdist_wheel,该examples目录包含在轮子中。我该如何防止这种情况?
根据
\n\n\n\n我希望这examples被排除在外。
最近,我只是尝试用 python 连接我的 SQL Server。所以我只是从“ http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql下载 .whl 文件。\在cmd窗口中,我使用以下命令:
\n\npip install some-package.whl\nRun Code Online (Sandbox Code Playgroud)\n\n我的电脑是window 64位,我尝试了以下所有.whl文件。\n http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql
\n\npymssql\xe2\x80\x911.0.3\xe2\x80\x91cp27\xe2\x80\x91none\xe2\x80\x91win32.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp27\xe2\x80\x91cp27m\xe2\x80\x91win32.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp27\xe2\x80\x91cp27m\xe2\x80\x91win_amd64.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp34\xe2\x80\x91cp34m\xe2\x80\x91win32.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp34\xe2\x80\x91cp34m\xe2\x80\x91win_amd64.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp35\xe2\x80\x91cp35m\xe2\x80\x91win32.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp35\xe2\x80\x91cp35m\xe2\x80\x91win_amd64.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp36\xe2\x80\x91cp36m\xe2\x80\x91win32.whl\npymssql\xe2\x80\x912.1.3\xe2\x80\x91cp36\xe2\x80\x91cp36m\xe2\x80\x91win_amd64.whl\nRun Code Online (Sandbox Code Playgroud)\n\n但安装失败,并显示错误消息,该系统不支持.whl文件。我应该怎么办。有人可以帮助我吗?
\n我有一个带有附加功能的软件包,通常可以使用以下命令进行安装。
pip install package[extras]
Run Code Online (Sandbox Code Playgroud)
但是,我也可以通过轮子安装相同的包,指定一些轮子 URL,如下所示。
pip install package_url.whl
Run Code Online (Sandbox Code Playgroud)
在通过轮子 url 安装时是否也可以指定附加功能?
pip install package_url.whl[extras]
Run Code Online (Sandbox Code Playgroud) 假设我有一个简单的库,它使用setuptools进行打包和分发。在这种情况下,库还需要最低版本的 Python 3.6,这意味着我的 setup.py 将如下所示:
from setuptools import setup, find_packages
setup(
name='something',
version='0.0.1',
description='description',
long_description=long_description,
# More metadata
packages=find_packages(exclude=['tests', 'docs']),
python_requires='>=3.6'
)
Run Code Online (Sandbox Code Playgroud)
现在,当我运行时python setup.py bdist_wheel,我得到一个名为something-0.0.1-py3-none-any.whl. 在这里很明显,python_requires在setuptools确定我的轮子的 Python 标签时,wheel 忽略了选项(它应该是py36但默认的py3)。显然,我意识到我可以--python-tag py36从命令行传入,这将完成这项工作,但是我用于部署我的库的持续部署服务只接受我正在使用的发行版的名称 ( bdist_wheel)。因此,我无法传递任何命令行参数。
经过一番研究,我发现我可以从bdist_wheel类继承并覆盖python_tag成员变量,但是根据wheel README:
应该注意的是,wheel不打算用作库,因此没有稳定的公共 API。
因此,我想避免从bdist_wheel类继承,这可能会迫使我在每次发生重大更改时重写我的类。
有没有其他方法可以通过 setuptools 传递轮子的 Python 标签?
我正在构建自己的 Python 安装,然后使用 pip 安装一些包。我想将预构建的二进制轮用于Cryptography等软件包。
在 GNU/Linux 上就可以了:它抓住了 Manylinux1 的轮子,一切都工作得很好。
在 MacOS 上,它拒绝下载大多数版本的任何二进制轮。我已经为 pip 添加了很多-v选项,但它只说了:
$ mypython -s -u -m pip install -v --only-binary 'cryptography' 'cryptography==2.6.1'
...
Skipping link https://files.pythonhosted.org/packages/.../cryptography-2.6.1-cp27-cp27m-macosx_10_6_intel.whl#sha256=... (from https://pypi.org/simple/cryptography/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*); it is not compatible with this Python
...
Could not find a version that satisfies the requirement cryptography==2.6.1 (from versions: 1.0.1, 1.0.2, 1.1, 1.1.1, 1.1.2, 1.2, 1.2.1, 1.2.2, 1.3.1, 1.3.2, 1.3.3, 1.3.4, 1.4, 1.5, 1.5.1, …Run Code Online (Sandbox Code Playgroud) 我正在尝试配置我requirements.txt的以下内容:
wheel
apache-airflow
Run Code Online (Sandbox Code Playgroud)
我创建python3.8 -m venv ~/test-env并尝试进行安装。问题是
python -m pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
产生大量消息
error: invalid command 'bdist_wheel'
----------------------------------------
Failed building wheel for thrift
Run Code Online (Sandbox Code Playgroud)
我确保wheel在安装时requirements.txt安装了它:
Collecting wheel (from -r requirements.txt (line 1))
Using cached https://files.pythonhosted.org/packages/00/83/b4a77d044e78ad1a45610eb88f745be2fd2c6d658f9798a15e384b7d57c9/wheel-0.33.6-py2.py3-none-any.
Run Code Online (Sandbox Code Playgroud)
但是如果我单独安装
python -m pip install wheel
python -m pip install -r requirements
Run Code Online (Sandbox Code Playgroud)
它工作正常,并且python -m pip -r requirements没有错误消息。
那么是不是可以将wheel安装放入requirements.txt?安装时处理它的正确方法是什么venv?安装前要requirements.txt安装吗?
这是我的问题:我需要分发我创建的 Python 包。我想创建轮子,因为这是现在分发 Python 包的首选方式。
在我的机器上:没问题。
然而,在我的客户端服务器上,我无法控制用于创建轮子的 Python (3.6.3)。还有——惊喜!- Python 3.6 中默认不包含wheel包!
是的,我知道我可以这样做:sudo pip install wheel但我在那个环境中没有 sudo 权限。
我可以创建一个virtualenv,在该虚拟环境中安装wheel,然后创建我的包(我可能最终会这样做),但这是多么痛苦的事情!
我在这里错过了什么吗?
如果没有,我认为存在不一致之处:一方面,我们被告知要使用轮子,但另一方面,“首选”机制在普通 Python 中不可用(至少在 Python 3.6 中)
对此有什么想法吗?
也许是一个有点宽泛的问题,但我认为这对于任何使用 github 的 python 包的维护者来说都是相关的,并且可以显着减少他们的工作量,所以希望权力能够让它成立。
本质上,在我看来:
所以我的问题是:
我可以想到涉及中间 s3 存储桶的各种解决方案,但对于 pypi 和/或 github 操作在这方面的工作方式,我可能犯了很大的错误,因此我正在浏览一个非常简单的问题。
python-wheel ×10
python ×9
pip ×5
pypi ×3
egg ×2
installation ×2
setuptools ×2
github ×1
macos ×1
pymssql ×1
python-3.x ×1
python-venv ×1
sql-server ×1