Dan*_*nov 22 python distutils setuptools
我们有一个占位符egg,它不包含任何代码,只是为了从PyPi存储库中提取依赖包列表而存在.
这些依赖包大多数是与平台无关的,但有些只在Win32平台上使用.
是否有可能以某种方式使依赖平台有条件,以便我的install_requires列表中的给定依赖项只会在Win32上安装时被拉下来?
或者:是否可以指定可选依赖项列表,如果可用,将安装,但如果不是,则不会导致easy_install失败?
wta*_*yeb 26
有关车轮,请参阅/sf/answers/2306887691/
这对于sdist或egg的发布来自:http://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-platform-specific-dependencies
有时,项目可能需要依赖项才能在特定平台上运行.这可能是一个包返回端口模块,以便它可以在较旧的python版本中使用.或者它可能是在特定操作系统上运行所需的包.这将允许项目在多个不同平台上工作,而无需安装安装项目的平台不需要的依赖项.
setup(
name="Project",
...
install_requires=[
'enum34 ; python_version<"3.4"',
'pywin32 >= 1.0 ; platform_system=="Windows"'
]
)
Run Code Online (Sandbox Code Playgroud)
cod*_*ape 13
在setup.py:
from setuptools import setup
import sys
setup(
name="...",
install_requires=["This", "That"] + (
["WinOnly", "AnotherWinOnly"] if sys.platform.startswith("win") else []
)
)
Run Code Online (Sandbox Code Playgroud)
distutils.util.get_platform提供的信息比sys.platform您需要的更多:
>>> sys.platform
'linux2'
>>> distutils.util.get_platform()
'linux-i686'
Run Code Online (Sandbox Code Playgroud)
使用extras_require分发选项使“ win32支持”成为可选功能:
setup(
...
extras_require={
'win32': 'pywin32'
},
...
)
Run Code Online (Sandbox Code Playgroud)
然后在Windows上安装时指定win32功能:
easy_install mypackage[win32]
Run Code Online (Sandbox Code Playgroud)
这将拉下该pywin32软件包,该软件包被列为mypackage的'win32'功能的依赖项。
有关可选功能的更多信息,请参见此处。