【问题标题】:How can I pip install for development?如何 pip install 进行开发?
【发布时间】:2019-06-06 22:13:07
【问题描述】:

我正在尝试在 site-packages 之外的本地 pip install 一个 GitHub 项目,以便我可以修改它等。

我已将-e git+git@github.com:Starcross/django-starcross-gallery.git#egg=gallery 添加到我的requirements.txt 中,这使我的项目布局的相关部分如下所示:

/home/mat/venv/proj/
└── src
    └── gallery
        ├── admin.py
        ├── apps.py
        ├── build.sh
        ├── django_starcross_gallery.egg-info
        │   ├── dependency_links.txt
        │   ├── PKG-INFO
        │   ├── requires.txt
        │   ├── SOURCES.txt
        │   └── top_level.txt
        ├── forms.py
        ├── __init__.py
        ├── LICENSE
        ├── MANIFEST.in
        ├── models.py
        ├── README.rst
        ├── settings.py
        ├── setup.py
        ├── signals.py
        ├── static
        │   └── ...
        ├── templates
        │   └── ...
        ├── tests
        │   └── ...
        ├── tests.py
        ├── urls.py
        └── views.py

据我所知,问题在于这些 .egg-link 和 .pth 文件的层次太深了:

lib/python3.6/site-packages/django-starcross-gallery.egg-link:
/home/mat/venv/proj/src/gallery
.

lib/python3.6/site-packages/easy-install.pth:
/home/mat/venv/proj/src/gallery

我可以通过将gallery 更深一层或将django-starcross-gallery.egg-linkeasy-install.pth 更改为指向src 来解决所有问题。

我可以在 requirements.txt 中传递一个配置参数以使其正常工作吗? 还是我必须调整项目布局以适应?

【问题讨论】:

  • 据我所知,问题出在包本身,因为它没有有效的 python 项目结构,因此没有使用 python 工具打包(而是使用自定义构建脚本)。如果您克隆 repo 并运行 python setup.py egg_info 以生成包元数据,您将看到没有包含任何源(因为没有要包含的包)。由于pip 显然不会在安装时猜测并运行自定义构建脚本,我认为您没有任何机会通过使用pip 选项来解决它,除非包维护者更改了项目结构。

标签: python django setuptools


【解决方案1】:

如前所述,最好的方法是克隆 repo。这适用于大多数软件包,因为 pip 可以构建扩展,并在安装期间执行其他操作,旨在将模块用于生产而不是编辑源代码。

为了解释我选择这种结构的原因,我希望能够在 Django 项目中开发包。正如Django docs 所说,应用程序应该放在一个单独的目录中,这使得 setuptools 能够正确安装包。我无法找到它可以继续在项目中工作,因此构建脚本将文件移动到合适的目录并生成包。

【讨论】:

    【解决方案2】:

    既然你想修改它,为什么不直接克隆 repo。为了让您的口译员能够找到并使用它,您有一些选择:

    • 修改你的sys.path,将路径附加到repo
    • 在您的项目目录下创建一个指向 repo 的符号链接

    而且这样一来,就不用每次修改都pip install了。

    【讨论】:

    • 为了公平起见,我已经克隆了它。我希望能够部署我的修改版本并将相关更改作为拉取请求提交回来。我试图最小化任何额外的设置代码 - 我应该能够从 requirements.txt 中提取它而无需任何额外的,但我现在花了太长时间来处理它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2014-01-13
    • 2015-06-01
    • 2019-11-18
    • 2013-05-15
    • 2021-08-16
    相关资源
    最近更新 更多