【问题标题】:Using Python 3 in virtualenv在 virtualenv 中使用 Python 3
【发布时间】:2014-07-13 14:37:24
【问题描述】:

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

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

例如sudo virtualenv envPython3

如果我尝试:

virtualenv -p python3 test

我明白了:

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

【问题讨论】:

  • 您是只尝试在当前环境中更新解释器,还是决定从头开始?
  • 是否可以只在虚拟环境中安装python3而不在mac上更新系统python(保留在python2.x中)?

标签: python python-3.x virtualenv


【解决方案1】:

对于那些正在使用pipenv并想安装特定版本的人:

pipenv install --python 3.6

【讨论】:

    【解决方案2】:

    以下简单的命令可以创建一个 3.5 版本的虚拟环境

    apt-get install python3-venv
    
    python3.5 -m venv <your env name>
    

    如果您希望虚拟环境版本为 3.6

    python3.6 -m venv <your env name>
    

    【讨论】:

      【解决方案3】:

      这就是你所需要的,以便在 python / python3 中运行虚拟环境

      首先如果virtualenv没有安装,运行

      pip3 install virtualenv 
      

      现在运行:

      virtualenv -p python3 <env name> 
      

      有时 cmd virtualenv 失败,如果是这样,请使用:

      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
      

      现在激活虚拟环境:

      source <env_name>/bin/activate
      

      或者:

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

      现在运行

      which python
      

      您应该会看到您的目录的完整路径和&lt;env_name&gt;/bin/python 后缀

      要退出 virtualenv,运行:

      deactivate 
      

      【讨论】:

        【解决方案4】:

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

        where python
        

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

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

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

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

        接下来,激活虚拟环境:

        call venv\Scripts\activate.bat
        

        最后,安装这个虚拟环境的依赖:

        pip install -r requirements.txt
        

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

        pip freeze > requirements.txt
        

        然后,一旦您拥有“冻结”的 requirements.txt,您就可以在另一台机器或干净的环境上安装需求(在 cd 到应用程序文件夹之后):

        pip install -r requirements.txt
        

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

        python --version
        

        然后瞧……你的 Python3 在你的虚拟环境中运行。为我输出:

        Python 3.7.2
        

        【讨论】:

          【解决方案5】:

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

          virtualenv --python=python3.5 envname
          

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

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

          -p 的工作原理

          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)
          

          【讨论】:

            【解决方案6】:

            安装先决条件。

            sudo apt-get install python3 python3-pip virtualenvwrapper
            

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

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

            进入虚拟环境。

            workon <venv-name>
            

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

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

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

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

            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 标志可能是安全的。

            【讨论】:

            • 我把它应用到 OSX 上,它工作了(除了没有使用 apt-get 而是 brew
            【解决方案7】:

            在python3.6中我试过了 python3 -m venv myenv, 根据文档,但是花了很长时间。所以非常简单快捷的命令是 python -m venv yourenv 它在 python3.6 上对我有用。

            【讨论】:

              【解决方案8】:

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

              $ python3 -m venv .env
              

              【讨论】:

                【解决方案9】:

                我遇到了同样的错误,因为它与 miniconda3 安装冲突,所以当你输入“which virtualenv”并且如果你已经安装了 miniconda 并且它指向那个安装,你可以删除它(如果你喜欢我并且没有'还没有移动到它)或更改您的环境变量以指向您想要的安装。

                【讨论】:

                  【解决方案10】:

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

                  我发现以下链接是最新 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。 它显示了不同平台的步骤,但基本步骤是

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

                  【讨论】:

                    【解决方案11】:

                    对于那些在使用 Anaconda3 (Python 3) 时遇到问题的人。

                    你可以使用

                    conda create -n name_of_your_virtualenv python=python_version 
                    

                    激活环境(Linux、MacOS)

                    source activate name_of_your_virtualenv
                    

                    对于 Windows

                    activate name_of_your_virtualenv
                    

                    【讨论】:

                      【解决方案12】:

                      virtualenv --python=/usr/local/bin/python3 &lt;VIRTUAL ENV NAME&gt; 这将添加 python3 您的虚拟环境的路径。

                      【讨论】:

                        【解决方案13】:

                        Python 现在带有自己的虚拟环境实现,名为“venv”。我建议使用它,而不是 virtualenv。

                        引用venv - docs

                        自 3.6 版起已弃用:pyvenv 是推荐的工具 为 Python 3.3 和 3.4 创建虚拟环境,并且是 在 Python 3.6 中已弃用。

                        3.5 版更改:现在建议使用 venv 创建虚拟环境。

                        对于windows,要在某个项目上启动venv,打开cmd:

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

                        (如果目录路径包含任何空格,建议在目录路径周围使用双引号。例如:“C:/My Dox/Spaced Directory/Something”)

                        设置好 venv 后,您会在项目目录中看到一些新文件夹。其中之一是“脚本”。

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

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

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

                        ================================= 编辑1 ============= ======================== 下面将讨论的场景不是最初要求的,只是添加这个以防有人使用带有python扩展的vscode

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

                        Here 是一个简单的方法来解决这个问题。

                        cd Workspace\Scripts
                        .\Activate.ps1
                        code .
                        

                        我们基本上是先激活环境,然后调用vs-code,这样pylint在环境内启动,可以看到所有本地包。

                        【讨论】:

                        • 我将virtualenv 用于虚拟环境的日常使用(workon 等),但为了在python3.x 中可靠地创建新的虚拟环境,这是我唯一的方法发现可行。
                        【解决方案14】:

                        Python 3 内置了对虚拟环境的支持 - venv。改用它可能会更好。参考文档:

                        虚拟环境的创建是通过执行pyvenv来完成的 脚本:

                        pyvenv /path/to/new/virtual/environment

                        Python 3.6 及更高版本的更新:

                        作为pawciobiel 正确commentspyvenv 在 Python 3.6 中是 deprecated,新方法是:

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

                        【讨论】:

                        • 我希望你是对的,因为我刚刚离开 virtualenv 与 python 3.5.2 一起使用 pyenv
                        • 我没有找到任何确认位置相关问题的信息,relocatable 已作为一个选项被删除...。现在不需要了吗?他们是一种解决方法吗?还是现在准备一个应用程序完全没用?
                        • 没错,但您也可以运行:python3 -m venv /path/v3,因为从 Python 3.6 开始不推荐使用 pyvenv 脚本。
                        • 在 mac 上使用最新的 anaconda python 3.6,这里有 python3 -m venv /path/v3 错误。 Error: Command '['/path/v3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit我错过了什么吗?使用--without-pip 选项,它至少可以正确创建带有激活/停用脚本的venv。
                        • "venv 在 Python 3.3 及更高版本中默认可用,并将 pip 和 setuptools 安装到 Python 3.4 及更高版本中创建的虚拟环境中。" packaging.python.org/tutorials/installing-packages/… 只是评论说它在提到的3.6版本之前可用。
                        【解决方案15】:

                        在 Mac 上,我必须执行以下操作才能使其正常工作。

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

                        【讨论】:

                        • 要找到你想要的python版本的确切位置使用which python2.7which python3.5which python3.6,然后替换关于--python=DIRECTORY
                        【解决方案16】:

                        以上方法我都试过了,还是不行。所以作为一个蛮力,我只是重新安装了anaconda,重新安装了virtualenv......并且它起作用了。

                        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$ 
                        

                        【讨论】:

                          【解决方案17】:

                          如果你安装 python3 (brew install python3) 和virtualenv burrito,那么你可以做mkvirtualenv -p $(which python3) env_name

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

                          【讨论】:

                            【解决方案18】:
                            virtualenv --python=/usr/bin/python3 <name of env>
                            

                            为我工作。

                            【讨论】:

                            • 我试过了,但是说The executable python3 (from --python=python3) does not exist,你会怎么做?我想 brew isntall python3 但不确定这是否是个好主意,或者我的系统是否会混淆我正在使用的 python 版本
                            【解决方案19】:

                            它对我有用

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

                            【讨论】:

                              【解决方案20】:

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

                              brew install pyenv
                              

                              然后安装你想要的 Python 版本:

                              pyenv install 3.5.0
                              

                              并简单地创建带有所需解释器版本路径的 virtualenv:

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

                              就是这样,检查版本:

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

                              还有 pyenv pyenv-virtualenv 的插件,但它对我不起作用。

                              【讨论】:

                              • 您的方法似乎需要创建一个新的python环境。 pyenv 可以与 virtualenv 一起使用,并且可以随时更改我的 python 版本吗?
                              【解决方案21】:

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

                              which virtualenv
                              

                              如果这在 /usr/local/bin 中出现了某些东西,那么有可能 - 甚至很可能 - 您安装了 virtualenv(可能使用 easy_tools 或 pip 的实例)而不使用系统的包管理器(在 OP 的情况下为 brew) .这是我的问题。

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

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

                              【讨论】:

                                【解决方案22】:

                                简单地运行

                                virtualenv -p python3 envname
                                

                                OP 编辑​​后更新:

                                here 所述,OP 的 virtualenv 版本中存在错误。问题已通过运行解决:

                                pip install --upgrade virtualenv
                                

                                【讨论】:

                                • virtualenv 升级有效,但出于某种原因,我还必须明确说明带有virtualenv -p $(which python3) envname的python3 可执行文件
                                • 是否可以只更改当前环境的python解释器而不是创建一个新环境?
                                • 在 Raspbian Jessie 'virtualenv --no-site-packages python3.4' 上工作。 --distribute 已弃用,并且 -p 似乎没有必要,因为 virtualenv 使用 python3。
                                • 为什么在运行virtualenv -p python3 my_virtual_env之后,python3也可以从虚拟环境之外访问?
                                • 之后您需要使用cd envname 并运行source ./bin/activate - 这将运行虚拟环境。使用deactivate 以退出此虚拟环境。
                                猜你喜欢
                                • 2015-04-06
                                • 1970-01-01
                                • 2018-06-27
                                • 1970-01-01
                                • 2020-10-09
                                • 2015-07-06
                                • 2016-08-30
                                • 1970-01-01
                                • 2017-09-16
                                相关资源
                                最近更新 更多