Man*_*ert 10 python setuptools
有没有办法告诉setuptools或分发需要特定平台上的包?
在我的特定情况下,我正在使用readline,它是Unix系统上标准库的一部分,但在Windows上我需要pyreadline模块来替换该功能(参见这个问题).如果我只是把它放在要求中它也安装在Unix系统上,它完全没用.
Rem*_*ing 19
虽然Martijn Pieters给出的答案在当时完全有效,但Python包装从那时起已经发生了很大的变化.
分发包的首选格式是使用wheel*.使用轮子在安装期间无法运行Python代码.
轮子使用PEP 0427中指定的元数据版本2 .环境标记可用于指定特定于平台的依赖项.
Setuptools允许将这些环境标记指定为extras_require键.以下示例脚本依赖于pyreadlineWindows系统和pyxdgLinux发行版.
#!/usr/bin/env python
from setuptools import setup
setup(
name='spam',
version='0.0.1',
extras_require={
':sys_platform == "win32"': [
'pyreadline'
],
':"linux" in sys_platform': [
'pyxdg'
]
})
Run Code Online (Sandbox Code Playgroud)
*还释放一个sdist,所以不能使用轮子的平台仍然可以安装你的包.
setup.py只是一个python脚本.您可以在该脚本中创建动态依赖项:
import platform
setup_requires = ['foo', 'bar']
if platform.system() == 'Windows':
setup_requires.append('pyreadline')
setup(
# ...
setup_requires=setup_requires,
)
Run Code Online (Sandbox Code Playgroud)
其他答案是有效的,如果需要支持旧setuptools版本可能更方便,但有一些进步:
最新版本的setuptools接受PEP 508样式依赖项规范:
setup(
# ...
install_requires=[
'pyreadline; platform_system == "Windows"',
],
)
Run Code Online (Sandbox Code Playgroud)
选择正确的参数:
install_requires:当前分发正常工作所需的其他发行版extras_require:将可选功能的名称映射到其需求列表的字典setup_requires:需要出现以使安装脚本正确运行的其他发行版注意:列出的项目setup_requires不会自动安装.如果它们本地不可用,则只需将它们下载到./.egs文件目录即可.还有一种通过setup.cfg文件提供这些参数的替代方法.有关详细信息,请参阅文档.
PEP 518引入了一种新的更有效setup_requires的pyproject.toml文件指定方式:
[build-system]
# Minimum requirements for the build system to execute.
requires = ['setuptools>"38.3.0"', 'wheel'] # PEP 508 specifications.
Run Code Online (Sandbox Code Playgroud)
该功能在pip 10.0.0b1中实现.使用它将能够自动安装和更新构建系统要求.
| 归档时间: |
|
| 查看次数: |
2890 次 |
| 最近记录: |