我能否告诉pip忽略通过`setup.py develop`安装的依赖项?

5

我正在开发一个Python库,我已经在本地虚拟环境中安装了它以进行测试。我使用pip安装了几个依赖项。当我执行以下命令时:

$ pip freeze > requirements.txt

它会像这样添加我的当前项目:

-e git+git@github.com:path/to/my/project@somehash#egg=lib-master

我必须手动删除它 - 我的项目实际上并不依赖于自身。是否可以向pip传递参数,告诉它“嘿,忽略这个/这些类型的包?”

2个回答

1
最简单的解决方案是将pip freeze的结果通过grep-v(反向匹配)选项进行管道传输:
pip freeze | grep -v 'project_name' > requirements.txt

演示:

$ mkvirtualenv test
New python executable in test/bin/python
Installing Setuptools...done.
Installing Pip...done.
(test)$ pip freeze
wsgiref==0.1.2
(test)$ pip install requests
Downloading/unpacking requests
  Downloading requests-2.2.1.tar.gz (421kB): 421kB downloaded
  Running setup.py egg_info for package requests

Installing collected packages: requests
  Running setup.py install for requests

Successfully installed requests
Cleaning up...
(test)$ pip freeze
requests==2.2.1
wsgiref==0.1.2
(test)$ pip freeze | grep -v 'requests'
wsgiref==0.1.2
(test)$ pip freeze | grep -v 'requests' > requirements.txt
(test)$ cat requirements.txt 
wsgiref==0.1.2

另请参阅: 使用grep进行负匹配(匹配不包含foo的行)

希望能帮到您。


不错!我喜欢它 - 唯一的“缺点”是它需要*nix或Windows上的unxutils,但我预计这将是我得到的最好答案。 - Wayne Werner
@WayneWerner,是的,我非常确定pip不支持您所需的用例。实际上,这与我最近在这里提出的问题“在某种程度上”相似。 pip根本不是yum,它只是一个简单的软件包管理器。 - alecxe

0

这是一个错误的问题。您不应该根据当前安装的内容来建立需求。您的项目应该指定其需求,并基于此信息(以及需求的需求)计算最终的需求集。请注意,开发需求应该被明确指定,以便根据需要单独安装 - 参见Setuptools“开发”需求如何为多个环境自定义requirements.txt?
不幸的是,pip目前无法计算这一点yet。您可以使用pip-tools进行计算,它将把结果写入requirements.txt文件中。请参阅我的答案,了解如何完整地使用pip-tools的示例。


我现在肯定更清楚了 :) - 我在 setup.py 中指定要求,而在开发过程中,我只使用具有 --dev 和普通安装选项的 pipenv - Wayne Werner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接