我的目标是为 python 轮发布提供正常版本号,例如1.0.0,并为特定分支提供特定于分支的版本号,例如1.0.0.dev1+hg.5.b11e5e6f0b0b.
不幸的是,Azure DevOps 将大多数版本号视为无效而拒绝,并显示以下两条错误消息之一:
HTTPError: 400 Client Error: Bad Request - The package version provided is invalid. Versions should conform to the format described in PEP 440 and be under 128 characters. (DevOps Activity ID: 0000000-AAAA-2222-3333-11111111111) for url: https://pkgs.dev.azure.com/sample/_packaging/sample_libraries/pypi/upload
for version numbers like:
version='1.0.0.1.dev', ok
version='1.0.0.1.dev1', ok
version='1.0.0.1.dev_2', ok
version='1.0.0.1.dev_2_b', FAIL
version='1.0.0.1.dev_2-3', FAIL
version='1.0.0.1.dev_2.3', FAIL
version='1.0.0.1.dev_2.3', FAIL
version='1.0.0.d1.dev', FAIL
version='1.0.0.d.dev', FAIL
version='1.0.0.1d1.dev', FAIL
version='1.0.0.1d1.dev1', FAIL
version='1.0.0.1.dev1-3', FAIL
version='1.0.0.1.dev1.3', FAIL
version='1.0.0.1.dev1.3', FAIL
version='1.0.0.1.1.3', ok
version='1.0.0.1.1-3.3', …Run Code Online (Sandbox Code Playgroud) 感谢这个精彩的教程,我刚刚学会了将我自己的 python 包上传到 PyPI 。我现在试图更好地理解如何wheels工作,我发现了这篇文章很有帮助。
但是,我仍然不明白为什么python setup.py bdist_wheel要创建一个几乎空的目录,并build以两个子文件夹命名:(bdist.win-amd64空)和lib(其中包含我的包的副本),以及开发人员稍后将通过执行 .txt 文件上传到 PyPI 的目录中的.whl文件。distpython -m twine upload dist/*
为什么build需要这个目录?我的意思是,dist目录还不够吗?而且,如果代码没有实际编译,为什么.whl称为二进制发行版。
我已经分叉了 dlandon 的Zoneminder项目,以便使用Debian Bullseye而不是 Ubuntu 为i386构建 Docker 映像(我将其安装到 32 位迷你 PC 中)。
部分要求是安装dlib(最新的是 19.22.0)。我已经安装了所需的依赖项(python3-pip、python3-setuptools和python3-wheel,以及 GCC 和 CMake)。
安装时dlib,终端输出:
Collecting dlib
Downloading dlib-19.22.0.tar.gz (7.4 MB)
Using legacy 'setup.py install' for dlib, since package 'wheel' is not installed.
Installing collected packages: dlib
Running setup.py install for dlib: started
...
Run Code Online (Sandbox Code Playgroud)
相关部分是(即使已python3-wheel安装)
Using legacy 'setup.py install' for dlib, since package 'wheel' is not installed.
Run Code Online (Sandbox Code Playgroud)
dlib …
是否可以使用“pip wheel”将 Linux 上的二进制轮上传到本地 devpi 服务器?或者我是否需要访问 setup.py 并从那里上传?在不需要 setup.py 的情况下构建轮子(它在幕后处理),只需要一个 setup.py 来上传结果,这似乎是一种耻辱。
这让我想知道:C 扩展 PyPI 目前只允许为 Windows 和 Mac OS X 上传特定于平台的轮子。为这些平台创建轮子仍然很有用,因为它避免了用户在安装时编译包的需要。
我正在做“pip -v -v -v wheel numpy”(例如),我有一个 pip.conf 和 .pypirc (都指向我们本地的 devpi)。
谢谢!
在不小心把一切弄乱之后,我刚刚重新安装了 python 和 virtualenv。我注意到我新创建的环境中的requirements.txt 自动包含wheel==0.24.0。这是正常现象吗?这是什么?我知道 virtualenv 应该创建没有任何系统安装的软件包的新环境。
在 RHEL 机器上
我有一些旧的 Django 项目要迁移到新服务器,这些项目是为 Python2.6、Django1.4.3 编写的
我已经安装了 python2.7,在我的主目录中创建了 virtualenvs,调整了对 Python 版本的路径和引用。
我为 Python2.7 创建了一个 virtualenv:
virtualenv -p python2.7 ~/.virtualenvs/my_site/
Run Code Online (Sandbox Code Playgroud)
当我激活 virtualenv 然后 cd 进入网站目录并运行
pip install -r requirements.txt
成功获取所有库后,requirements.txt中的每一行都显示以下错误:
Building wheels for collected packages: MySQL-python, Pillow...etc
Running setup.py bdist_wheel for MySQL-python ... error
Complete output from command /home/my_user/.virtualenvs/my_site/bin/python2.7 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-96k9a4/MySQL-python/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-ngSbQU --python-tag cp27:
usage: -c [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
or: -c --help [cmd1 cmd2 ...]
or: …Run Code Online (Sandbox Code Playgroud) 如何pip install选择要安装的轮子?
假设我为不同的平台构建了多个轮子,上传到 PyPI 会pip install <package>自动安装与平台匹配的正确轮子吗?
如果我只构建了一个 Linux 特定的轮子并上传到 PyPI,而 Windows/Mac 上的某个人试图通过运行来安装它,会发生pip install <package>什么?
我从这里有一个用于编译包的wheel文件。我想将其托管在我的内部pypi服务器上。可能吗?
我用 Python 编写了一个与 Qt 框架配合使用的实用程序库。我的代码是纯Python,并且与PyQt5和PySide2兼容。我的主模块可以从命令行单独运行python -m,也可以导入到另一个项目中。有没有一种干净的方法来指定项目在其轮子发行版中需要 PyQt5 或 PySide2?
这是我在研究中发现的内容,但我想知道是否有比这些选项更好的方法来打包项目:
我可以在项目的源代码分发中添加逻辑setup.py来检查 PyQt5 和 PySide2。然而,轮子是分发 Python 项目的推荐方式,据我所知,这种安装时逻辑使用轮子是不可能的。或者,我无法指定 PySide2 或 PyQt5 作为依赖项,并在安装说明中建议将其中之一与我的项目一起安装。
我知道我可以通过先写一个setup.py然后输入来创建一个轮子
python setup.py bdist_wheel
Run Code Online (Sandbox Code Playgroud)
如果我的轮子仅依赖于 pypi 中的包,我知道我可以通过执行以下操作来安装它们:
pip install mypkg.whl
Run Code Online (Sandbox Code Playgroud)
问题:如果我的轮子依赖于我的其他轮子,我可以让 pip 从文件夹自动安装它们吗?本质上使用文件夹作为穷人的私人pypi
更具体地说,如果pkg1我有一个setup.py:
from setuptools import setup
setup(
...
name = "pkg1",
install_requires = ["requests"],
...
)
Run Code Online (Sandbox Code Playgroud)
而在pkg2我有:
from setuptools import setup
setup(
...
name = "pkg2",
install_requires = ["pkg1"],
...
)
Run Code Online (Sandbox Code Playgroud)
这将在安装时失败,因为 pip 会尝试pkg1在 pypi 中查找。是否可以告诉它只查看文件夹?
python-wheel ×10
python ×7
pip ×2
artifact ×1
azure-devops ×1
devpi ×1
distutils ×1
django ×1
dlib ×1
docker ×1
packaging ×1
pypi ×1
python-2.7 ×1
python-3.9 ×1
setuptools ×1
virtualenv ×1