【问题标题】:Update a Python virtualenv? [duplicate]更新 Python virtualenv? [复制]
【发布时间】:2015-05-02 17:17:29
【问题描述】:

考虑到在基础 Python 中所做的更改,如果能够更新使用 virtualenv --system-site-packages /path/to/myvirtenv 生成的虚拟环境将非常方便。

例如,如果 IPython 2.4 已安装在 virtualenv 中,而 IPython 3.0 稍后已安装在基础 Python 中,则应从虚拟环境中删除旧的 IPython 并替换为新包的副本。

我们怎样才能做到这一点?是否已经有执行此操作的命令?如果没有,是否可以在包 virtualenv 中实现它?

PS:当您没有管理员权限时,使用 --system-site-packages 选项生成的虚拟环境非常方便,但如果对基本 Python 的任何修改使虚拟环境出现错误,它似乎不是好方法!

PS:这个问题和这个问题virtualenv not finding updated module有关。

【问题讨论】:

    标签: python virtualenv


    【解决方案1】:

    如果 IPython 2.4 已安装在 virtualenv 中,并且后来 IPython 3.0 已安装在基础 Python 中,则应从虚拟环境中删除旧的 IPython 并替换为新包的副本。

    您也许可以调整现有的 virtualenv,例如通过创建一个新文件并将文件复制到现有文件中。但是,我发现最好和安全的更新方式如下:

    # preserve installed packages
    source /path/to/venv/bin/activate
    pip freeze > requirements.txt
    deactivate
    # careful now, this destroys all
    rm -rf /path/to/venv
    

    然后创建一个新的virtualenv

    # apply base changes
    virtualenv --system-site-packages /path/to/venv
    source /path/to/venv/bin/activate
    pip install -r requirements.txt
    

    【讨论】:

    • 我认为它可能比这更简单。我认为您需要做的就是升级后的“virtualenv --system-site-packages /path/to/venv”。似乎可以在我的系统上解决问题
    • @yassam --system-site-packages 允许访问系统范围内的软件包。如果 venv 中安装的某些包没有在系统范围内安装,那将不起作用。
    【解决方案2】:

    刚刚遇到同样的问题,最佳答案已被弃用。 因此,用python3创建virtualenv应该是这样的:

    python3 -m venv /path/to/venv
    

    结果是:

    source /path/to/venv/bin/activate
    pip3 freeze > requirements.txt
    deactivate
    rm -rf /path/to/venv
    python3 -m venv /path/to/venv
    source /path/to/venv/bin/activate
    pip3 install -r requirements.txt
    

    请记住,这仅对 python 3 有效

    【讨论】:

    • 您甚至不需要激活。从 venv 的路径调用 bin/python 就足够了(例如 /path/to/venv/bin/python -m pip freeze > requirements.txt
    猜你喜欢
    • 2017-11-14
    • 2019-01-25
    • 2020-05-05
    • 2016-07-01
    • 2012-07-16
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多