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

min*_*als 9 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
Run Code Online (Sandbox Code Playgroud)

我怎么做?

Run*_*ith 10

有一种新技术(自 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"]
      )
Run Code Online (Sandbox Code Playgroud)


wie*_*u_p 7

有可能但不确定您应该使用哪个 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')
  ]
)
Run Code Online (Sandbox Code Playgroud)

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

  • [dependency_links 已删除](https://github.com/Applied-GeoSolutions/gips/issues/246) (3认同)
  • 这不适用于较新的 pip 版本,请滚动到我的答案,了解适用于 pip &gt;= 19.1 的内容 (2认同)

Hey*_*Man 5

根据上面的 @RunOrVeith 答案,这适用于使用相对路径的本地轮文件。因此可以在各种主机上使用它来安装第三方软件包。适用于 Windows 和 Unix。

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