我使用以下命令创建了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中安装?
答案 0 :(得分:27)
如果您不希望它能够使用外部库,请使用--no-site-packages
创建您的virtualenv:
virtualenv --no-site-packages my-virtualenv
. my-virtualenv/bin/activate
pip install ipython
否则,如您的示例所示,它可以看到系统Python环境中安装的库满足您请求的依赖项。
答案 1 :(得分:17)
避免头痛和最佳实践:
虚拟环境不属于您的git项目(它们不需要进行版本控制)!
为虚拟环境创建一个文件夹。
为了更好的表示,这是一个模拟:
$ 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
>>>
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;:
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
(假设您已经安装了MiniConda,并且位于开始菜单&gt; Anaconda&gt; Anaconda终端)
conda create -n VIRTUAL python=3
activate VIRTUAL
安装任何套餐:pip install package
或conda install package
退出虚拟环境:deactivate
再次激活:activate VIRTUAL
答案 10 :(得分:0)
如果有帮助,请分享个人案例。这是以前安排的虚拟环境。其路径可以通过
显示 echo $VIRTUAL_ENV
确保它对当前用户可写。如果没有,请使用
sudo ipython
肯定会清除警告信息。
在anaconda中,如果$ VIRTUAL_ENV是独立排列的,可以简单地删除该文件夹或重命名它,然后重新启动shell。 Anaconda将恢复到默认设置。
答案 11 :(得分:0)
我在 VS 代码中遇到了同样的问题。
问题是我的 vs 终端显示了我的 virtualenv,但是当我运行安装包时,它会检查我的本地电脑。所以我发现我无法在 VS 代码中使用运行功能,因为这让我的电脑感到困惑。相反,我需要使用以下命令在 VS 的终端内运行我的 python: python3 -i 文件名.py
然后代码工作了,但我猜它仍在使用全局包。