【问题标题】:Can existing virtualenv be upgraded gracefully?现有的 virtualenv 可以优雅升级吗?
【发布时间】:2011-01-11 07:58:13
【问题描述】:

我为 Python 2.5 创建了一个 virtualenv,并希望将其“升级”到 Python 2.6。

这是它最初的设置方式:

virtualenv --no-site-packages -p python2.5 myenv

我现在在同一目录下运行 virtualenv 进行升级:

virtualenv --no-site-packages -p python2.6 myenv
...
Not overwriting existing python script myenv/bin/python (you must use myenv/bin/python2.6)
...
Overwriting myenv/bin/activate with new content

默认的python还是2.5,虽然我也可以指定2.6。有没有办法完全删除 2.5 并让“bin/python”指向 2.6?

【问题讨论】:

  • 2021 年,我想最好的办法是创建一个新的 venv 并重新安装依赖项 - 可能其他 SO 答案(包括使用 upgrade)可能不合适

标签: python virtualenv


【解决方案1】:

您应该使用python2.6 创建一个新的virtualenv,然后在激活新环境后,使用它的python2.6 和它的easy_install 来安装您需要的任何站点包的新版本。请注意,virtualenv 的路径名已硬连线到环境中的各种文件中,因此,当您准备切换到它时,要么更改启动脚本等以引用新的 virualenv 路径,要么非常小心将其复制到旧目录并修改其中的路径名。

【讨论】:

    【解决方案2】:

    您可以使用 Python 2.6 virtualenv 来“重新虚拟化”现有目录。您将不得不重新安装您安装的所有模块。我经常有一个用于开发模块的虚拟目录,而 virtualenv 与许多版本的 Python 相同的目录,它工作得很好。 :)

    【讨论】:

    • 谢谢!我尝试了您的方法,发现“激活”脚本已更新,但旧版本仍然存在(请参阅修改后的问题)。能举个例子吗?
    • 您可以在使用 python 2.6 重新运行 virtualenv 之前删除 virtualenv 中的 bin/python 可执行文件。
    • 嗯,你可以让它工作 - 但为什么呢? virtualenv 的最大吸引力在于它可以轻松且廉价地创建可重现的 Python 环境。为什么要搞砸一个,而不是确定你已经修复了所有东西,或者你可以再次重现它,或者当你可以制作一个新的干净的时候,你正在扰乱你的生产环境?
    • @Ned:Virtualenv 不会创建可重现的环境,它会创建孤立的环境。要重现它们,您还需要以相同的方式安装所有东西,virtualenv 还不够。 zc.buildout 在那里更好。
    • @Ned:点了;这是我工作的一个开发环境。我想把它保留在 2.5 中,除非我绝对需要做 2.6。这种需求出现了,所以我很好奇您是否可以升级隔离环境以查看对代码的影响,而无需重建并将目录复制/粘贴到新环境。
    【解决方案3】:

    在 CentOS 上安装第二个 Python

    1. 下载python
    2. 安装到本地差异

      configure --prefix=/opt/virtualenv/python 
      make && make install
      
    3. 使用新的 python 创建虚拟环境

      virtualenv /opt/virtualenv --python=/opt/python276/bin/python
      

      注意:如果需要,可以由其他用户完成

      chown pyuser -R /opt/virtualenv
      su - pyuser
      source /opt/virtualenv/bin/activate
      python -v
      
    4. 创建虚拟环境:

      virtualenv /opt/virtualenv
      su - infograficos
      source bin/activate
      
    5. 使用 python 2.7 安装 pip(在 virtualenv 中)

      easy_install pip 
      

    【讨论】:

      【解决方案4】:

      如果您使用的是 OS X,如果您想将 Python 升级到较小的版本(例如 2.7.6 到 2.7.8),同时保持第三方库正常工作,请尝试 this

      它适用于我在 5 个安装了 Django 的不同虚拟环境中。

      【讨论】:

        【解决方案5】:

        在 Python 3.3+ 中 venv 支持 --upgrade 标志

          --upgrade             Upgrade the environment directory to use this version
                                of Python, assuming Python has been upgraded in-place.
        

        用法:

        python -m venv --upgrade YOUR_VENV_DIRECTORY
        

        我刚刚在几个项目中将我的 venv 从 Python 3.7.x 升级到 3.8,没有任何问题。

        【讨论】:

        • "假设 Python 已就地升级" ...不幸的是,这似乎意味着如果我的系统 python3 指向 3.6,我无法创建让 python3 指向 3.7在我的生活中
        • @joel 我还没有尝试过,但是/path/to/user/python -m venv --upgrade 可以吗?
        猜你喜欢
        • 2011-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-30
        • 1970-01-01
        • 2016-05-22
        • 2014-12-14
        相关资源
        最近更新 更多