【问题标题】:How to specify dependencies that setup.py needs during installation?如何指定 setup.py 在安装过程中需要的依赖项?
【发布时间】:2018-09-17 20:09:43
【问题描述】:

在某些情况下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'],但没用。

那么如何指定这种依赖关系呢?

【问题讨论】:

  • 使用setup_requires 是正确的,但是您不能在安装脚本的顶部导入setup_requires 中列出的包。你需要进口做什么?如果你导入foo 来为setup() 函数组装输入参数,那么你就没有机会在设置脚本中管理这个依赖;否则,覆盖命令应该是答案。显示您的设置脚本。

标签: python setuptools setup.py


【解决方案1】:

setup.py 中所需的依赖项不能在 setup.py 中指定。你必须在运行python setup.py之前安装它们:

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

【讨论】:

    【解决方案2】:

    我想出了一个窍门——调用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(
        ...
    )
    

    【讨论】:

      【解决方案3】:

      我有类似的问题,我想从 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方法有setup_requires参数,可以指定setup依赖。如setuptools doccumentation 中所述,setup_requires 中列出的项目不会自动安装在运行安装脚本的系统上。如果您希望它们被安装,并且在运行安装脚本时可用,您应该将它们添加到install_requiressetup_requires

      如果您有任何其他问题,请告诉我。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-05-08
          • 2015-01-10
          • 1970-01-01
          • 2018-11-13
          • 1970-01-01
          • 2022-01-15
          • 1970-01-01
          • 1970-01-01
          • 2014-11-03
          相关资源
          最近更新 更多