如何在安装过程中指定setup.py需要的依赖项?

时间:2018-04-08 08:09:28

标签: python setuptools setup.py

在某些情况下,setup.py需要导入一些额外的模块,例如:

from setuptools import setup
import foo

setup(
    # e.g. a keyword uses `foo`
    version=foo.generate_version()
)

如果未安装foosetup.py的执行将因ImportError而失败。

我尝试使用setup_requires,例如setup_requires=['foo'],但没有帮助。

那么如何指定这种依赖?

5 个答案:

答案 0 :(得分:2)

setup.py中所需的依赖关系无法在setup.py中指定。您必须在运行python setup.py之前安装它们:

pip install -r requirements.txt
python setup.py install

答案 1 :(得分:1)

pyproject.toml 允许指定自定义构建工具:

[build-system]
requires = [..., foo, ...]
build-backend = "setuptools.build_meta"

答案 2 :(得分:0)

我有类似的问题,我想从yaml文件中获取安装程序的版本,因此我需要对其进行解析并从中获取版本。

我使用以下脚本作为答案:

#!/usr/bin/env python

from setuptools import setup
import yaml


def find_version():
    with open('meta/main.yml') as meta_main:
        return yaml.load(meta_main)['version']


setup(name='sample',
      version=find_version(),
      packages=[],
      setup_requires=['pyyaml'])

我发现安装方法具有setup_requires参数,您可以指定安装依赖项。如setuptools doccumentation中所述,setup_requires中列出的项目不会自动安装在运行安装脚本的系统上。如果要安装它们并使其在运行安装脚本时可用,则应将它们添加到install_requiressetup_requires中。

让我知道您是否还有其他问题。

答案 3 :(得分:-1)

您可以使用install_requires添加依赖项:

setup(
   ...
   install_requires=[
    'argparse',
    'setuptools==38.2.4',
    'docutils >= 0.3',
    'Django >= 1.11, != 1.11.1, <= 2',
    'requests[security, socks] >= 2.18.4',
   ],
)

答案 4 :(得分:-1)

我想到了一个技巧 - 调用pip来安装setup.py

中的依赖项
import pip
pip.main(['install', 'foo', 'bar'])    # call pip to install them

# Now I can import foo & bar
import foo, bar
from setuptools import setup

setup(
    ...
)