【问题标题】:Manage python version in different virtualenv with pythonbrew使用 pythonbrew 管理不同 virtualenv 中的 python 版本
【发布时间】:2013-02-10 21:00:40
【问题描述】:

我的主系统python版本是2.7.3。我正在尝试创建一个使用 3.3.0 版本的virtualenv。我安装了 pythonbrew、virtualenv 和 virtualenvwrapper。

我遵循了这个教程:http://technomilk.wordpress.com/2011/07/27/setting-up-our-django-site-environment-with-pythonbrew-and-virtualenv/

本质上运行pythonbrew use 3.3.0,然后创建一个virtualenv。该教程说 virtualenv 将使用 pythonbrew 使用的版本。但事实并非如此。 virtualenv 在我启动时使用 2.7.3。当我执行pythonbrew use 3.3.0 时,它会离开 virtualenv 并应用于系统而不是环境。

显然,pythonbrew 有自己的 virtualenv 包装器,它有一个教程在:http://suvashthapaliya.com/blog/2012/01/sandboxed-python-virtual-environments/

我讨厌那样做。是否可以将 virtualenvwrapper 与 pythonbrew(而不是 pythonbrew 的 venv 包装器)一起使用,以便能够为每个 venv 选择使用哪个 python 版本,并将它们与系统 python 版本分开?

另外,我不想使用mkvirtualenv -p 标志,因为这意味着我需要手动安装python3.3。我宁愿坚持使用包管理器来管理 python 版本。很难相信 python 中没有任何东西等同于 ruby​​ 中的 RVM...除非我弄错了?

【问题讨论】:

    标签: python virtualenv virtualenvwrapper pythonbrew


    【解决方案1】:

    也许你应该改用http://pypi.python.org/pypi/pythonbrew/。当我这样做时,我使用 pythonbrew 创建了 venv

    pythonbrew install 2.7.3
    pythonbrew switch 2.7.3
    pythonbrew venv create proj
    

    像冠军一样工作。

    我已经开始在我的 git repo 下的 .folder 中创建我的虚拟环境,这样我就可以在不弄乱我的代码的情况下处理虚拟环境,如果我愿意的话,我可以重建它。我在使用 jenkins 为您执行 git clone 时遇到了这种技术,然后您必须弄清楚如何围绕它构建一个虚拟环境。

    Python/proj
        .proj           <---- Virtual environment is in here!
            lib
            site-packages
        settings
        requirements
        apps
    

    我还有一个对我有用的 bash 函数。

    function workon() {
         if [ -d ~/Python/$1 ]
         then
                cd ~/Python/$1
                if [ -d .$1 ]
                then
                    . .${1}/bin/activate
                else
                    . bin/activate
                    cd $1
                fi
         fi
    }
    

    这对于处理在虚拟环境中完成克隆的旧项目以及在项目中虚拟环境完成的新项目过于复杂。

    【讨论】:

    • 如果您阅读了我的整个问题,我确实使用了 pythonbrew。唯一的区别是我使用use 命令切换到python 版本,而不是使用switch 命令创建venv。当我使用use 命令并创建venv 时,venv 将具有旧版本,而不是我在use 命令中使用的版本。问题是否与我使用use 命令而不是您上面写的switch 命令有关?
    • 实际上我认为问题更多在于尝试使用 virtualenvwrapper,这就是为什么我为在这种情况下有效的 workon 提供了我的别名。创建 venv 后,您应该能够切换到其他内容,并且当您激活 venv 时,您最终会在该环境中获得正确的版本。可能是pythonbrew使用的是当前命令,类似于LD_LIBRARY=foo runsomething,而switch更像export LI_LIBRARY=foo。但是一旦你创建了 virtualenv,我想它会激活并使用正确的 python 运行。
    • 当我使用你的指令时:pythonbrew venv create proj |它在这个文件夹树中创建了一个新的python(2.7.6):user/.pythonbrew/venvs/Python-2.7.6/proj ...我现在如何在这个虚拟环境中安装东西?我应该从 venvs 中的 Python-2.7.6 文件夹工作吗?通常使用 pythonbrew 我会在任何文件夹中工作,但为此,您似乎需要在此特定文件夹中工作并在这里安装额外的工具/库。您的反馈将不胜感激。
    • 一旦你激活了 virtualenv,pip 将安装到其中,而不管你在安装时的当前目录。激活是这里的关键。
    • 谢谢马克,我从“pythonbrew venv use proj”命令中发现了这一点。在您的文件/文件夹树中,您表明您的实际应用程序代码位于项目文件夹本身中。这是使用venv的最佳方式吗?我正在考虑将我的应用程序代码保留在其他地方,但这似乎违背了虚拟环境的目的。另外,在命令行虚拟环境中使用命令创建带有文件/文件夹的应用程序时,生成文件/文件夹的代码会自动转到项目文件夹吗?
    最近更新 更多