我正在开发一个Python库,我已经在本地虚拟环境中安装了它以进行测试。我使用pip安装了几个依赖项。当我执行以下命令时:
$ pip freeze > requirements.txt
它会像这样添加我的当前项目:
-e git+git@github.com:path/to/my/project@somehash#egg=lib-master
我必须手动删除它 - 我的项目实际上并不依赖于自身。是否可以向pip传递参数,告诉它“嘿,忽略这个/这些类型的包?”
我正在开发一个Python库,我已经在本地虚拟环境中安装了它以进行测试。我使用pip安装了几个依赖项。当我执行以下命令时:
$ pip freeze > requirements.txt
它会像这样添加我的当前项目:
-e git+git@github.com:path/to/my/project@somehash#egg=lib-master
我必须手动删除它 - 我的项目实际上并不依赖于自身。是否可以向pip传递参数,告诉它“嘿,忽略这个/这些类型的包?”
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的行)。
希望能帮到您。
这是一个错误的问题。您不应该根据当前安装的内容来建立需求。您的项目应该指定其需求,并基于此信息(以及需求的需求)计算最终的需求集。请注意,开发需求应该被明确指定,以便根据需要单独安装 - 参见Setuptools“开发”需求和如何为多个环境自定义requirements.txt?。
不幸的是,pip目前无法计算这一点yet。您可以使用pip-tools进行计算,它将把结果写入requirements.txt文件中。请参阅我的答案,了解如何完整地使用pip-tools的示例。
setup.py
中指定要求,而在开发过程中,我只使用具有 --dev
和普通安装选项的 pipenv
。 - Wayne Werner
pip
不支持您所需的用例。实际上,这与我最近在这里提出的问题“在某种程度上”相似。pip
根本不是yum
,它只是一个简单的软件包管理器。 - alecxe