在某些情况下,setup.py
需要导入一些额外的模块,例如:
from setuptools import setup
import foo
setup(
# e.g. a keyword uses `foo`
version=foo.generate_version()
)
如果未安装foo
,setup.py
的执行将因ImportError
而失败。
我尝试使用setup_requires
,例如setup_requires=['foo']
,但没有帮助。
那么如何指定这种依赖?
答案 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_requires
和setup_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(
...
)