如何从本地文件系统安装(或分发)安装程序包

mil*_*dev 21 python packaging setuptools distribute

是否可以指定(可编辑的)源依赖关系setup.py已知驻留在本地文件系统上?

请考虑以下目录结构,所有目录结构都位于单个VCS存储库中:

projects
  utils
    setup.py
    ...
  app1
     setup.py
     ... # app1 files depend on ../utils
  app2
     setup.py
     ... # app2 files depend on ../utils
Run Code Online (Sandbox Code Playgroud)

给出以下命令:

cd projects
mkvirtualenv app1
pip install -e app1
Run Code Online (Sandbox Code Playgroud)

我想安装app1的所有依赖项,包括"utils",这是一个"可编辑"的依赖项.同样,如果我为app2做了同样的事情.

我已经试过所有不同组合打file://...的网址,install_requiresdependency_links无济于事.我想使用依赖链接URL src+file://../utils,这会告诉setuptools包的源是在这个相对路径的文件系统上.有没有办法做到这一点?

小智 10

我设法在 setup.py 中提供相对本地依赖:

setup(
    install_requires=[
        'utils @ file://localhost/%s/../utils/' % os.getcwd().replace('\\', '/'),
        ],
    )
Run Code Online (Sandbox Code Playgroud)

但也许有人知道更好的解决方案


Dan*_*nza 5

我有一个相同的问题,我需要依赖同级文件夹中的模块。在绊倒https://caremad.io/2013/07/setup-vs-requirement/之后,我能够找到解决方案

我结束了requirements.txt文件,使其专门指向我想要的文件,然后使用

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

requirements.txt

-e ../utils                                                                                                                                                                    
-e .
Run Code Online (Sandbox Code Playgroud)

setup.py还有我所有的其他依赖项,包括utils。当pip尝试自行安装app1时,它意识到utils依赖关系已被填充,因此在安装其他要求时会通过它。


txo*_*mon 0

当我想要处理一组相互关联的项目时,我使用/setup.py develop.

如果我错误地或后来我想让 pip 安装的模块可编辑,我会克隆源代码,并python setup.py develop对其进行操作,替换现有的模块。

为了确定,我删除了 virtualenv 的站点包和包本身中的引用。