在virtualenv中使用Python 3

Using Python 3 in virtualenv

使用virtualenv,我使用默认版本的python(2.7)运行我的项目。在一个项目中,我需要使用python 3.4。

我用brew install python3把它安装在我的Mac上。现在,如何创建使用新版本的virtualenv?

例如sudo virtualenv envpython3

如果我尝试:

1
virtualenv -p python3 test

我得到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/usr/local/Cellar/python3/3.4.0_1/Frameworks/Python.framework/Versions/3.4'
New python executable in test/bin/python3.4
Also creating executable in test/bin/python
Failed to import the site module
Traceback (most recent call last):
  File"/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/site.py", line 67, in <module>
    import os
  File"/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/os.py", line 634, in <module>
    from _collections_abc import MutableMapping
ImportError: No module named '_collections_abc'
ERROR: The executable test/bin/python3.4 is not functioning
ERROR: It thinks sys.prefix is '/Users/user/Documents/workspace/test' (should be '/Users/user/Documents/workspace/test/test')
ERROR: virtualenv is not compatible with this system or executable


简单运行

1
virtualenv -p python3 envname

操作编辑后更新:

如本文所述,操作版virtualenv中有一个bug。通过运行以下命令解决了问题:

1
pip install --upgrade virtualenv


python 3内置了对虚拟环境的支持——venv。最好用它来代替。参考文件:

Creation of virtual environments is done by executing the pyvenv
script:

pyvenv /path/to/new/virtual/environment

更新python 3.6及更新版本:

由于pawciobiel的正确评论,从python 3.6开始不推荐使用pyvenv,新方法是:

1
python3 -m venv /path/to/new/virtual/environment


安装必备组件。

1
sudo apt-get install python3 python3-pip virtualenvwrapper

创建基于python3的虚拟环境。可选启用--system-site-packages标志。

1
mkvirtualenv -p /usr/bin/python3 <venv-name>

设置到虚拟环境中。

1
workon <venv-name>

使用pip包管理器安装其他需求。

1
2
pip install -r requirements.txt
pip install <package_name>

当同时处理多个python项目时,通常建议在全局安装像pdbpp这样的通用包,然后在virtualenv中重用它们。

使用这种技术,除了消耗最小的磁盘空间和网络带宽外,还可以节省大量时间来获取和安装软件包。

1
2
sudo -H pip3 -v install pdbpp
mkvirtualenv -p $(which python3) --system-site-packages <venv-name>

Django特定说明

如果有很多系统范围的python包,那么建议不要使用--system-site-packages标志,特别是在开发过程中,因为我注意到它会大大降低django的启动速度。我假设Django环境初始化是手动扫描和附加系统路径中的所有站点包,这可能是原因。即使是python manage.py shell也变得非常缓慢。

说了那个实验,哪个选项更有效。对于django项目,跳过--system-site-packages标志可能是安全的。


我试过pyenv,它对于切换python版本(全局、本地文件夹或virtualenv)非常方便:

1
brew install pyenv

然后安装所需的python版本:

1
pyenv install 3.5.0

只需创建带有所需解释器版本路径的virtualenv:

1
virtualenv -p /Users/johnny/.pyenv/versions/3.5.0/bin/python3.5 myenv

就这样,检查版本:

1
. ./myenv/bin/activate && python -V

还有一个pyenv-pyenv-virtualenv的插件,但不知怎么的,它对我不起作用。


1
virtualenv --python=/usr/bin/python3 <name of env>

为我工作。


您可以在创建环境时指定特定版本的python。在virtualenv.py中提到过

1
virtualenv --python=python3.5 envname

在某些情况下,这必须是可执行文件的完整路径:

1
virtualenv --python=/Users/username/.pyenv/versions/3.6.0/bin/python3.6 envname

-p的工作原理

1
2
3
4
5
6
7
parser.add_option(
    '-p', '--python',
    dest='python',
    metavar='PYTHON_EXE',
    help='The Python interpreter to use, e.g., --python=python3.5 will use the python3.5 '
    'interpreter to create the new environment.  The default is the interpreter that '
    'virtualenv was installed with (%s)' % sys.executable)


我有同样的消息。在我的情况下,tbrisker的解决方案不起作用。相反,这解决了问题:

1
$ python3 -m venv .env

python现在以"venv"的名字提供了自己的虚拟环境实现。我建议使用它,而不是virtualenv。

从Venv-Docs报价,

Deprecated since version 3.6: pyvenv was the recommended tool for
creating virtual environments for Python 3.3 and 3.4, and is
deprecated in Python 3.6.

Changed in version 3.5: The use of venv is now recommended for
creating virtual environments.

对于Windows,要在某些项目上启动venv,请打开命令:

1
python -m venv"c:\path\to\myenv"

(如果目录路径包含空格,建议在其周围使用双引号)。例如:"c:/my dox/spaced directory/something")。

一旦设置了venv,您将在项目目录中看到一些新的文件夹。其中之一就是"脚本"。

要激活或调用venv,您需要:

1
C:\> <venv>\Scripts\activate.bat

您可以通过在shell中键入"deactivate"来停用虚拟环境。这样,您就可以安装项目特定的库了,这些库将位于文件夹"lib"下。

=========================编辑1=============================下面将讨论的场景不是最初要求的,只是在有人将vscode与python扩展一起使用时添加它。

如果在其python扩展中使用vs代码,则可能会遇到指向全局安装的pylint问题。在这种情况下,pylint将无法看到安装在虚拟环境中的模块,因此在导入时将显示错误。

下面是一个简单的方法来克服这个问题。

1
2
3
cd Workspace\Scripts
.\Activate.ps1
code .

我们基本上是先激活环境,然后调用vs代码,以便pylint在环境中启动,并可以看到所有本地包。


除了其他答案外,我建议检查您正在执行的virtualenv实例:

1
which virtualenv

如果这在/usr/local/bin中出现,那么您可能(甚至可能)安装了virtualenv(可能使用easy-tools或pip的实例),而不使用系统的包管理器(在op中为brew)。这是我的问题。

几年前,当我更加无知的时候,我安装了virtualenv,它掩盖了我的系统包提供的virtualenv。

在删除了这个旧的、损坏的virtualenv之后,我的问题就消失了。


在python3.6我尝试过python3 -m venv myenv;根据文件,但这需要很长时间。所以非常简单和快速的命令是python -m venv yourenv对我来说,它在Python3.6上起作用。


在Mac上,我必须做以下工作才能让它工作。

1
mkvirtualenv --python=/usr/bin/python3 YourEnvNameHere


这就是在python/python3中运行虚拟环境所需的全部内容。

首先确保您有virtualenv,现在

运行:

1
virtualenv -p python3 <env name>

有时上面的命令失败,只需使用以下命令:

1
python3 -m virtualenv <env_name>  # you can specify full path instead <env_name> to install the file in a different location other than the current location

现在激活虚拟环境:

1
source <env_name>/bin/activate

或:

1
source `pwd`/<env_name>/bin/activate

运行(退出):

1
deactivate

如果安装python3(brew install python3和virtualenv burrito),则可以执行mkvirtualenv -p $(which python3) env_name操作。

当然,我知道virtualenv玉米煎饼只是一个包装,但多年来它对我很有帮助,减少了一些学习曲线。


virtualenv --python=/usr/local/bin/python3 这将添加python3虚拟环境的路径。


对于那些在使用Python3(python3)时遇到问题的人。

你可以使用

1
conda create -n name_of_your_virtualenv python=python_version

激活环境(Linux、MacOS)

1
source activate name_of_your_virtualenv

对于Windows

1
activate name_of_your_virtualenv

It worked for me

1
virtualenv --no-site-packages --distribute -p /usr/bin/python3 ~/.virtualenvs/py3

我都试过了,还是没用。所以作为一个蛮力,我只是重新安装了Python,重新安装了虚拟环境…它奏效了。

1
2
3
4
5
6
7
8
9
10
11
12
Amans-MacBook-Pro:~ amanmadan$ pip install virtualenv
You are using pip version 6.1.1, however version 8.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting virtualenv
  Downloading virtualenv-15.0.3-py2.py3-none-any.whl (3.5MB)
    100% |████████████████████████████████| 3.5MB 114kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-15.0.3
Amans-MacBook-Pro:python amanmadan$ virtualenv my_env
New python executable in /Users/amanmadan/Documents/HadoopStuff/python/my_env/bin/python
Installing setuptools, pip, wheel...done.
Amans-MacBook-Pro:python amanmadan$

我想在Centos7上保留python 2.7.5作为默认版本,但在与python 2.x中的其他虚拟环境一起运行的虚拟环境中有python 3.6.1

我发现下面的链接是最新python版本(python 3.6.1)的最佳解决方案https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming-environment-for-python-3.它显示了不同平台的步骤,但基本步骤是

  • 为您的平台安装python3.x(如果不存在)
  • 为您的平台安装python3.x-devel
  • 在python 3.x中创建虚拟环境(例如$python3.6-m venv virenv_test_p3/)
  • 为python 3.x激活testenvironment(例如源virenv_test_p3/bin/activate)
  • 安装要在新的python 3虚拟环境中使用且受支持的包(例如pip install django==1.11.2)

  • 对于使用pipenv并希望安装特定版本的用户:

    1
    pipenv install --python 3.6


    在Windows命令行上,以下内容对我有效。首先找出您的python可执行文件的位置:

    1
    where python

    这将输出到系统上不同python.exe的路径。这里是我的:

    1
    2
    C:\Users\carandangc\Anaconda3\python.exe
    C:\Python27\python.exe

    所以对于python3,它位于我的第一个路径中,所以我cd到应用程序的根文件夹,在那里我要创建一个虚拟环境文件夹。然后,我运行以下命令,其中包括指向python3可执行文件的路径,并将虚拟环境命名为"venv":

    1
    virtualenv --python=/Users/carandangc/Anaconda3/python.exe venv

    接下来,激活虚拟环境:

    1
    call venv\Scripts\activate.bat

    最后,安装此虚拟环境的依赖项:

    1
    pip install -r requirements.txt

    如果您知道虚拟环境中应用程序所需的库/模块,则可以手动填充此requirements.txt。如果应用程序在另一个环境中运行,则可以通过运行以下内容自动生成依赖项(CD到其工作环境中的应用程序文件夹):

    1
    pip freeze > requirements.txt

    然后,一旦您的requirements.txt被"冻结",您就可以在另一台计算机或干净的环境中安装这些要求,方法如下(在CD到应用程序文件夹之后):

    1
    pip install -r requirements.txt

    要在虚拟环境中查看您的python版本,请运行:

    1
    python --version

    那么,瞧……你的python3在你的虚拟环境中运行。我的输出:

    1
    Python 3.7.2

    我也有同样的错误,因为它与miniconda3安装冲突,所以当您键入"which virtualenv"时,如果您已经安装了miniconda,并且指向该安装,您可以删除它(如果您喜欢我,但尚未移动到它),或者更改环境变量以指向您想要的安装。