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

时间:2016-02-27 09:53:16

标签: python setuptools setup.py

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

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

想象一下以下的app结构:

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

我该怎么做?

4 个答案:

答案 0 :(得分:7)

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

PublicTenantAppService

答案 1 :(得分:2)

您可以选择以下几个选项:

  1. 将您的包上传到某个服务器,并提供包含dependency_links
  2. 的网址
  3. 您可以将您的python包放在my_app包中,并将其与packages参数链接,而不是使用滚轮文件。
  4. 更麻烦的方法是使用setuptools api,并自行安装包。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

可能,但不确定应使用哪个setuptools版本。 步骤:

在setup.py

{"scottsTickets":{"agent":"Scott","activeTickets":1,"onHoldTickets":0,"unreadTickets":0}}

重要的是,您的位置不应通过URL模式测试,并且egg文件名应具有结构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') ] )