繁体   English   中英

Python中setup.py中如何包含安装本地依赖?

[英]How to include and install local dependencies in setup.py in Python?

我正在创建一个setup.py来分发我的应用程序。 此应用程序有许多依赖项可以通过 pip 安装,它还有一些自定义依赖项不能从 PyPI 安装。

因此,我创建了一个custom_package_0.1.whl ,它将包含在发行版中,并且必须在setup.pyinstall_requires安装所有内容后作为依赖项安装。

想象一下以下应用程序结构:

my_app/
    win_deps/custom_package_0.1.whl
    my_app/
        __init__.py
        main.py
        setup.py
        setup.cfg

我怎么做?

有一种新技术(自 19.1 版起)称为Direct references 假设您的文件托管在本地主机上。

from setuptools import setup

path_to_my_project = "/home/user/projects/my_package"  # Do any sort of fancy resolving of the path here if you need to


setup(# ... other arguments
      install_requires=[f"my_package @ file://localhost/{path_to_my_project}#egg=my_package"]
      )

有可能但不确定您应该使用哪个 setuptools 版本。 脚步:

在 setup.py 中

setup(
  ...,
  install_requires=['my-package'],
  dependency_links=[
    # location to your egg file
    os.path.join(os.getcwd(), 'deps', 'my_package-1.0.0-py3.5.egg')
  ]
)

重要的是您的位置不应该通过 URL 模式测试,并且 egg 文件名应该具有结构<package_name_with_no_hyphens>-<version>-<py_version>.egg

基于上面的@RunOrVeith 回答,这适用于使用相对路径的本地 wheel 文件。 所以它可以在各种主机上安装第三方 package。适用于 Windows 和 Unix。

setup(# ... other arguments
      install_requires=[
          f"my-lib @ file://localhost/{os.getcwd()}/libs/my_lib-xxx-none-any.whl"
      ]
)

扩展 wiesiu_p 的答案,您可以通过链接到其源目录来安装依赖项,该目录具有自己的setup.py

假设你有你的依赖的源文件my-dependency ,以及根my-dependency有其自身setup.py 在您的应用程序的setup.py

setup(
  ...,
  install_requires=['other-dependency','my-dependency'],
  dependency_links=[
    # location to your my-dependency project directory
    ''.join(['file:\\', os.path.join(os.getcwd(), 'path', 'to', 'my-dependency#egg=my-dependency-1.0')])
  ]
)

现在,如果您使用应用程序的setup.py运行python setup.py install ,它将安装my-dependency

您可以从以下几个选项中进行选择:

  1. 将您的包上传到某个服务器,并提供带有dependency_links的 URL。
  2. 您可以将您的 python 包放在my_app包中,并将其与packages参数链接,而不是使用轮文件。
  3. 一种更hacky 的方法是使用setuptools api,然后自己安装包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM