gpt4 book ai didi

python - 当 setup.py 使用 Python 版本 3 解释器运行时,如何构建 py2 wheel 包?

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:26 25 4
gpt4 key购买 nike

我有一个包应该是 Python 仅版本 2 但需要构建运行版本 3 解释器。

这个包的 setup.py 看起来像命中:

from setuptools import setup

setup(
python_requires="<3.0, >=2.7.5",
classifiers=[
'Programming Language :: Python :: 2',
'Intended Audience :: Developers',
],
# ... more keyword arguments ...
)

如果我调用 python2 setup.py build bdist_wheel,我得到:

$ ls dist
mypackage-0.3.dev14-py2-none-any.whl

如果我使用版本 3 解释器运行它,即 python3 setup.py build bdist_wheel,我得到:

$ ls dist
mypackage-0.3.dev14-py3-none-any.whl

我本以为无论解释器版本如何,我都会得到一个 py2 包,因为我用 python_requires (和标签中)指定了它。我的包构建服务器只有一个 Python 3 解释器。

在使用 Python 3 解释器运行 setuptools 时,如何构建一个以 Python 2 为目标的轮子?这可能吗?文件名中的 -py3-/-py2 是否与我认为的不同?

最佳答案

修改自 How to force a python wheel to be platform specific when building it? ,对 setup.py 的更改似乎有效。

但我怀疑可能有更简单的方法。

from setuptools import setup

try:
from wheel.bdist_wheel import bdist_wheel as _bdist_wheel

class bdist_wheel(_bdist_wheel):

def finalize_options(self):
_bdist_wheel.finalize_options(self)
self.root_is_pure = False # Mark us as not a pure python package

def get_tag(self):
python, abi, plat = _bdist_wheel.get_tag(self)
python, abi = 'py2', 'none' # python, abi, plat = 'py2', 'none', 'any'
return python, abi, plat
except ImportError:
bdist_wheel = None

setup(
cmdclass={'bdist_wheel': bdist_wheel}
# ... other keyword args ...
)

编辑:

有了这个解决方案,平台 (plat) 似乎发生了变化,因为生成的文件名以 -py2-none-linux_x86_64.whl 结尾。

我怀疑这是 self.root_is_pure = False 的结果。因为我的包中没有二进制文件,所以我认为将平台设置为 any ant pure to True 是安全的。

编辑2:

另一种可能的解决方案:

import sys
import setuptools

if 'bdist_wheel' in sys.argv:
if not any(arg.startswith('--python-tag') for arg in sys.argv):
sys.argv.extend(['--python-tag', 'py2'])

setuptools.setup(
# ...
)

关于python - 当 setup.py 使用 Python 版本 3 解释器运行时,如何构建 py2 wheel 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54988279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com