具有操作系统特定依赖性的 pip 包

kor*_*inp 1 python pip python-packaging

我想创建一个依赖于某些操作系统特定文件的 pip 包:

假设有:

  • dependency_Windows_x86_64.zip
  • dependency_Linux_x86_64.zip
  • dependency_MAC_OS_X.zip

我不想将所有三个档案包含在一个包项目中,而是在pip install my-package基于用户操作系统的过程中动态下载它们。我怎样才能做到这一点 ?我应该将负责下载/解压缩这些文件的代码放在哪里?

我的setup.py看起来像这样:

from setuptools import setup 

setup(
  name='my-package',
  version='0.0.1',
  description='Package description',
  py_modules=['my_package'],
  package_dir={'': 'src'},
  classifiers=[
    'Intended Audience :: Developers',
    'License :: OSI Approved :: MIT License',
    'Operating System :: POSIX :: Linux',
    'Operating System :: Microsoft :: Windows',
    'Operating System :: MacOS',
    'Programming Language :: Python :: 3',
    'Programming Language :: Python :: 3.7'
  ],
  python_requires='>=3.7'
)
Run Code Online (Sandbox Code Playgroud)

sin*_*roc 5

平台特定的依赖项可以保存在单独的 Python 项目中(仅数据包的包装),然后从主项目中获取,如下所示:

# setup.cfg
# ...
[options]
install_requires =
    my_package_win_amd64 ; platform_system=="Windows" and platform_machine=="x86_64"
    my_package_linux-x86_64 ; platform_system=="Linux" and platform_machine=="x86_64"
Run Code Online (Sandbox Code Playgroud)

这种方法不依赖于安装工具,可以与其他构建系统一起使用。