如何在virtualenv中安装包?

use*_*739 38 python pip virtualenv

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

mkvirtualenv --distribute --system-site-packages "$1"
Run Code Online (Sandbox Code Playgroud)

在启动virtualenv之后workon,我输入ipython.它提示我

WARNING: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
Run Code Online (Sandbox Code Playgroud)

当我尝试使用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...
Run Code Online (Sandbox Code Playgroud)

有谁知道如何在virtualenv内安装?

Cha*_*ffy 28

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

virtualenv --no-site-packages my-virtualenv
. my-virtualenv/bin/activate
pip install ipython
Run Code Online (Sandbox Code Playgroud)

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

  • 通常,应避免使用`--system-site-packages`.这个标志击败了virtualenvs的全部内容(这就是为什么`--no-site-packages`在几个版本之前成为默认值). (12认同)

iva*_*ncz 24

避免头痛和最佳实践:

  • 虚拟环境不是您的git项目的一部分(它们不需要版本化)!

  • 为您的虚拟环境创建一个文件夹.

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


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

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

$ mkdir venv
Run Code Online (Sandbox Code Playgroud)

创造环境

$ cd venv/ 

$ virtualenv google_drive
New python executable in google_drive/bin/python
Installing setuptools, pip...done.
Run Code Online (Sandbox Code Playgroud)

激活环境

$ source google_drive/bin/activate
Run Code Online (Sandbox Code Playgroud)

安装包

(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...
Run Code Online (Sandbox Code Playgroud)

包在环境中可用

(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()
>>>
Run Code Online (Sandbox Code Playgroud)

停用环境

(google_drive) $ deactivate 

$ 
Run Code Online (Sandbox Code Playgroud)

包装不适用于环境之外

$ 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
>>> 
Run Code Online (Sandbox Code Playgroud)

笔记:

为什么不sudo?

Virtualenv为您创建了一个全新的环境,定义了$ PATH和其他一些变量和设置.当你使用sudo pip install package时,你正在以root身份运行Virtualenv ,逃避创建的整个环境,然后在全局站点包上安装包,而不是在你有虚拟环境的项目文件夹中安装,尽管你激活了环境.

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

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

例如:

bin/pip,第1行(She Bang)

bin/activate,第42行(VIRTUAL_ENV)

  • 为从不 sudo pip 安装包部分加 1 (2认同)
  • @ivanleoncz 你的解释意义重大。但我确实有另一个问题,没有 sudo 我无法在 virtualenv 中安装软件包。你能提供什么建议吗? (2认同)

Ja8*_*its 8

好吧,我没有一个适当的理由来解释为什么会出现这种情况,但后来我发现了一个小小的工作

在VirtualEnvironment内部

pip install -Iv package_name==version_number
Run Code Online (Sandbox Code Playgroud)

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

此外,您可以使用此功能在虚拟环境中进行检查

pip install yolk
yolk -l
Run Code Online (Sandbox Code Playgroud)

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

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

你可以用这个作为黑客,下次要小心:)


Pep*_*zza 7

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


moo*_*von 7

对于Python 3:

pip3 install virtualenv

python3 -m venv venv_name

source venv_name/bin/activate  #key step

pip3 install "package-name"
Run Code Online (Sandbox Code Playgroud)

  • 我的机器(Win 10)上找不到“source”。我使用“.\{venv_name}\Scripts\activate”,然后简单地“deactivate”来进入和退出虚拟环境。 (3认同)
  • `pip3 install virtualenv` 在这里完全没有必要;您正在安装第三方软件包但从未使用过它。“venv”包是 Python 标准库的一部分,尽管在某些平台上(特别是 Debian 以及 Ubuntu 和 Mint 等衍生发行版)它已被拆分为需要首先安装的单独包;`apt-get 安装 python3-pip python3-venv` (3认同)

Chr*_*ott 5

为了进一步澄清这里的其他答案:

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

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

bin/activate
Run Code Online (Sandbox Code Playgroud)

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

您遇到的问题是因为您正在从本地计算机运行程序(例如 ipython),而您想要安装并运行在虚拟环境中隔离的这些程序的副本。您可以通过以下方式进行设置:创建环境(如果使用当前版本,则无需指定任何站点包标志),运行上面提到的激活脚本,然后运行 ​​pip 来安装您需要的任何包(这将进入环境内部)。


Geo*_*los 5

您可以转到您venv所在的文件夹并右键单击 ->git bash here. 然后您就可以了python -m pip install ipython,它将安装在该文件夹中。

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