如何在virtualenv中安装包?

时间:2014-01-20 17:40:55

标签: python virtualenv pip

我使用以下命令创建了virtualenv。

mkvirtualenv --distribute --system-site-packages "$1"

在使用workon启动virtualenv后,我输入ipython。它提示我

WARNING: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.

当我尝试使用virtualenv安装ipython时,我收到以下错误消息:

pip install ipython
Requirement already satisfied (use --upgrade to upgrade): ipython in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
Cleaning up...

有没有人知道如何在virtualenv中安装?

12 个答案:

答案 0 :(得分:27)

如果您不希望它能够使用外部库,请使用--no-site-packages创建您的virtualenv:

virtualenv --no-site-packages my-virtualenv
. my-virtualenv/bin/activate
pip install ipython

否则,如您的示例所示,它可以看到系统Python环境中安装的库满足您请求的依赖项。

答案 1 :(得分:17)

避免头痛和最佳实践:

  • 虚拟环境不属于您的git项目(它们不需要进行版本控制)!

  • 为虚拟环境创建一个文件夹。

  • 激活项目的虚拟环境后,永远不要" sudo pip install package "。
  • 完成工作后,始终" 停用"你的环境。
  • 避免重命名项目文件夹。


为了更好的表示,这是一个模拟:

为您的项目/环境创建文件夹

$ mkdir venv

创建环境

$ cd venv/ 

$ virtualenv google_drive
New python executable in google_drive/bin/python
Installing setuptools, pip...done.

激活环境

$ source google_drive/bin/activate

安装包

(google_drive) $ pip install PyDrive
Downloading/unpacking PyDrive
Downloading PyDrive-1.3.1-py2-none-any.whl
...
...
...    
Successfully installed PyDrive PyYAML google-api-python-client oauth2client six uritemplate httplib2 pyasn1 rsa pyasn1-modules
Cleaning up...

包在环境中可用

(google_drive) $ python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import pydrive.auth
>>>  
>>> gdrive = pydrive.auth.GoogleAuth()
>>>

停用环境

(google_drive) $ deactivate 

$ 

包在环境之外无法使用

$ python
Python 2.7.6 (default, Oct 26 2016, 20:32:10) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import pydrive.auth
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named pydrive.auth
>>> 

注意:

为什么不sudo?

  

Virtualenv为您创建了一个全新的环境,定义了$ PATH和其他一些变量和设置。当您使用 sudo pip install package 时,您将运行Virtualenv作为 root ,转义已创建的整个环境,然后在全局站点包上安装该程序包,<虽然您已经激活了环境,但是在您拥有虚拟环境的项目文件夹中没有。>

如果您重命名项目的文件夹......

  

...您必须从项目的 bin 目录中的某些文件调整一些变量。

     

例如:

     

bin / pip,第1行(She Bang)

     

bin / activate,第42行(VIRTUAL_ENV)

答案 2 :(得分:8)

嗯,我没有正确的理由说明为什么会出现这种情况,但后来我发现了一个小工作

  

VirtualEnvironment内部

pip install -Iv package_name==version_number

现在这将在您的虚拟环境中安装该版本

  

此外,您可以使用此

在虚拟环境中查看
pip install yolk
yolk -l

这将为您提供两个位置(系统和virtualenv)中所有已安装软件包的详细信息

虽然有些人可能会说它不适合使用--system-site-packages(可能是这样),但是如果你已经在virtualenv中做了很多东西呢?现在你不想从头开始重做所有东西。

您可以将其用作黑客并在下次注意时小心:)

答案 3 :(得分:7)

对于Python 3:

pip3 install virtualenv

python3 -m venv venv_name

source venv_name/bin/activate  #key step

pip3 install "package-name"

答案 4 :(得分:5)

要使用virtualenv创建的环境,首先需要source env/bin/activate。之后,只需使用pip install package-name安装软件包。

答案 5 :(得分:4)

进一步澄清其他答案:

在当前版本的virtualenv下, - no-site-packages标志是默认行为,因此您无需指定它。但是,您通过显式使用--system-site-packages标志来覆盖默认值,这可能不是您想要的。默认行为(未指定任一标志)是创建虚拟环境,以便在使用它时,无法访问安装在环境外的任何Python包。这通常是正确的选择,因为它最好将虚拟环境与本地计算机环境隔离开来。环境中安装的Python包不会影响本地计算机,反之亦然。

其次,要在创建虚拟环境后使用虚拟环境,您需要导航到虚拟环境目录然后运行:

bin/activate

这样做是为了配置环境变量,以便在本地计算机上的标准位置之前使用Python包和虚拟环境的bin文件夹中的任何可执行文件。因此,例如,当您键入“pip”时,将运行虚拟环境中的pip版本,而不是本地计算机上的pip版本。这是可取的,因为虚拟环境中的pip将在虚拟环境中安装软件包。

您遇到的问题是因为您正在运行本地计算机上的程序(如ipython),而您希望安装并运行虚拟环境中隔离的那些程序的副本。您可以通过创建环境来设置它(如果您使用的是当前版本,则不指定任何site-packages标志),运行上面提到的激活脚本,然后运行pip来安装您需要的任何软件包(将进入环境)。

答案 6 :(得分:1)

我遇到了同样的问题,--no-site-packages对我不起作用。我在这个较旧的邮件列表存档中发现,您可以使用-U标记来强制在virtualenv中安装,例如pip -U ipython。您可以在virtualenv中使用bash命令which ipython验证这是否有效。

来源:https://mail.python.org/pipermail/python-list/2010-March/571663.html

答案 7 :(得分:1)

来自文档https://docs.python.org/3/library/venv.html

  

自Python 3.6起,pyvenv脚本已被弃用,支持使用python3 -m venv来帮助防止任何可能混淆虚拟环境将基于哪个Python解释器。

要为特定项目创建虚拟环境,请创建文件STARTTLS

/home/user/path/to/create_venv.sh

然后在控制台中运行此脚本:

#!/usr/bin/env bash

# define path to your project's directory
PROJECT_DIR=/home/user/path/to/Project1

# a directory with virtual environment
# will be created in your Project1 directory
# it recommended to add this path into your .gitignore
VENV_DIR="${PROJECT_DIR}"/venv

# https://docs.python.org/3/library/venv.html
python3 -m venv "${VENV_DIR}"

# activates the newly created virtual environment
. "${VENV_DIR}"/bin/activate

# prints activated version of Python
python3 -V

pip3 install --upgrade pip

# Write here all Python libraries which you want to install over pip
# An example or requirements.txt see here:
# https://docs.python.org/3/tutorial/venv.html#managing-packages-with-pip
pip3 install -r "${PROJECT_DIR}"/requirements.txt

echo "Virtual environment ${VENV_DIR} has been created"

deactivate

答案 8 :(得分:1)

您可以转到venv所在的文件夹,然后右键单击-> git bash here. 然后,您只需对python -m pip install ipython进行操作,它将安装在文件夹中。

我发现使用virtualenv软件包在项目文件夹内创建venv更加方便。

答案 9 :(得分:0)

在Ubuntu和Windows中分享对我有用的内容。这是为python3。为python2做,替换&#34; 3&#34;用&#34; 2&#34;:

Ubuntu的

pip install virtualenv --user
virtualenv -p python3 /tmp/VIRTUAL
source /tmp/VIRTUAL/bin/activate
which python3

安装任何套餐:pip install package

退出虚拟环境:deactivate

再次激活:source /tmp/VIRTUAL/bin/activate

Full explanation here

(假设您已经安装了MiniConda,并且位于开始菜单&gt; Anaconda&gt; Anaconda终端)

conda create -n VIRTUAL python=3  
activate VIRTUAL

安装任何套餐:pip install packageconda install package

退出虚拟环境:deactivate

再次激活:activate VIRTUAL

Full explanation here

答案 10 :(得分:0)

如果有帮助,请分享个人案例。这是以前安排的虚拟环境。其路径可以通过

显示

echo $VIRTUAL_ENV

确保它对当前用户可写。如果没有,请使用

sudo ipython

肯定会清除警告信息。

在anaconda中,如果$ VIRTUAL_ENV是独立排列的,可以简单地删除该文件夹或重命名它,然后重新启动shell。 Anaconda将恢复到默认设置。

答案 11 :(得分:0)

我在 VS 代码中遇到了同样的问题。

问题是我的 vs 终端显示了我的 virtualenv,但是当我运行安装包时,它会检查我的本地电脑。所以我发现我无法在 VS 代码中使用运行功能,因为这让我的电脑感到困惑。相反,我需要使用以下命令在 VS 的终端内运行我的 python: python3 -i 文件名.py

然后代码工作了,但我猜它仍在使用全局包。