如何在某个virtualenv中列出已安装的软件包?


73

你可以cdYOUR_ENV/lib/pythonxx/site-packages/,看一看,但没有任何方便的方式?

pip freeze 列出所有已安装的软件包,包括系统环境的软件包。

Answers:


29

pip在virtualenv中调用command应该列出在隔离环境中可见/可用的软件包。确保使用--no-site-packages默认情况下使用options的virtualenv的最新版本。这样,使用virtualenv的目的是创建一个python环境,而无需访问安装在系统python中的软件包。

接下来,确保您使用pipvirtualenv(YOUR_ENV/bin/pip)中提供的命令。或者只是激活virtualenv(source YOUR_ENV/bin/activate)作为调用python解释器或pip的正确命令的便捷方法

~/Projects$ virtualenv --version
1.9.1

~/Projects$ virtualenv -p /usr/bin/python2.7 demoenv2.7
Running virtualenv with interpreter /usr/bin/python2.7
New python executable in demoenv2.7/bin/python2.7
Also creating executable in demoenv2.7/bin/python
Installing setuptools............................done.
Installing pip...............done.

~/Projects$ cd demoenv2.7/
~/Projects/demoenv2.7$ bin/pip freeze
wsgiref==0.1.2

~/Projects/demoenv2.7$ bin/pip install commandlineapp
Downloading/unpacking commandlineapp
Downloading CommandLineApp-3.0.7.tar.gz (142kB): 142kB downloaded
Running setup.py egg_info for package commandlineapp
Installing collected packages: commandlineapp
Running setup.py install for commandlineapp
Successfully installed commandlineapp
Cleaning up...

~/Projects/demoenv2.7$ bin/pip freeze
CommandLineApp==3.0.7
wsgiref==0.1.2

我的回答奇怪的是,包'wsgiref'在virtualenv内部可见。它来自我的系统python。目前,我不知道为什么,但是您的系统上可能有所不同。


抱歉,我的错。我忘记了我当前的virtualenv ENV没有使用该--no-site-packages选项。然后,我创建了另一个带有该选项的ENV进行测试,并且可以正常工作。感谢您的提醒。
holys 2013年

3
这实际上并不能回答以下问题:给定具有站点包的virtualenv,我们如何仅过滤安装在virtualenv中的那些。
Ioannis Filippidis

这个答案对通常使用的人来说已经足够了--no-site-packages。鉴于--local不需要了解旗帜。但是您的回答无疑会为该问题的读者增加价值。
Sascha Gottfried

69

您只能在virtualenvby pip freeze --local 或中 列出软件包pip list --local。无论您是否在中看到全局站点包,此选项都有效virtualenv

请注意,限制virtualenv不使用全局站点包不是解决问题的方法,因为问题在于如何分隔两个列表,而不是如何约束工作流以适应工具的限制。

感谢@gvalkov在这里的评论。cf. 也是这个问题


谢谢!在我的回答中,我尝试将您的出色见解与Sascha指出的核心内容结合起来。
nealmcb

1
事后看来,这绝对是pip命令,它帮助virtualenv的用户尚未意识到隔离系统软件包的选项。感谢您让我知道此选项,在阅读与此主题相关的任何文档时都从未遇到过这个问题。
Sascha Gottfried

15

列出virtualenv中已安装的软件包

第1步:

工作环境名称

第2步:

点冻结

它将显示所有已安装的软件包以及已安装的软件包和版本


7

如果您仍然对此感到困惑,则virtualenv可能无法选择如何结合Ioannis和Sascha的答案中的出色技巧。也就是说,这是您需要的基本命令:

/YOUR_ENV/bin/pip freeze --local

那可以很容易地在其他地方使用。例如,这是一个方便且完整的答案,适用于在您通过virtualenvwrapper设置的所有环境中安装所有本地软件包:

cd ${WORKON_HOME:-~/.virtualenvs}
for dir in *; do [ -d $dir ] && $dir/bin/pip freeze --local >  /tmp/$dir.fl; done
more /tmp/*.fl

1
事后看来,这绝对是pip命令,它帮助virtualenv的用户尚未意识到隔离系统软件包的选项。感谢您让我知道此选项,在阅读与此主题相关的任何文档时都从未遇到过。
Sascha Gottfried

3

你为什么不尝试点子清单

记住我在python版本3.7.3上使用的是pip版本19.1


2

如果您使用pip 19.0.3python 3.7.4。然后pip list在您的virtualenv中输入命令。它将显示所有已安装的软件包以及相应的版本。


2

在Python3中

pip list

空静脉是

Package    Version
---------- ------- 
pip        19.2.3 
setuptools 41.2.0

开始一个新的环境

python3 -m venv your_foldername_here

启用

cd your_foldername_here
source bin/activate

停用

deactivate

您也可以站在文件夹中并为虚拟环境指定名称/文件夹(python3 -m venv name_of_venv)。

Venv是3.3之后随Python一起提供的virtualenv的子集。


使用venv运行Jupyter:“ ipython kernel install --user --name = projectname”然后在启动jupyter时选择内核。
Punnerud

0

在我的情况下,烧瓶版本仅在下面可见,因此我必须转到C:\ Users \\ AppData \ Local \ flask \ venv \ Scripts> pip Frozen --local


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.