首页 > 解决方案 > 具有操作系统特定依赖性的 pip 包

问题描述

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

假设有:

我不想将所有三个档案都包含在一个包项目中,而是在打包过程中动态下载它们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'
)

标签: pythonpippython-packaging

解决方案


特定于平台的依赖项可以保存在单独的 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"

这种方法不依赖于setuptools并且可以与其他构建系统一起使用。


推荐阅读