现有的virtualenv可以优雅地升级吗?

Mat*_*ris 89 python virtualenv

我有一个为Python 2.5创建的virtualenv,并希望将其"升级"为Python 2.6.

以下是最初的设置方式:

virtualenv --no-site-packages -p python2.5 myenv
Run Code Online (Sandbox Code Playgroud)

我现在在同一目录中运行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
Run Code Online (Sandbox Code Playgroud)

默认的python仍然是2.5,即使我也可以指定2.6.有没有办法完全删除 2.5并将'bin/python'指向2.6而不是?

Len*_*bro 60

您可以使用Python 2.6 virtualenv来"复制"现有目录.您必须重新安装所有已安装的模块.我经常有一个用于开发模块的虚拟目录,以及与许多Python版本相同的目录virtualenv,它工作得很好.:)

  • 你可以在使用python 2.6重新运行virtualenv之前删除virtualenv中的bin/python可执行文件. (12认同)
  • 好吧,你*可以*让它发挥作用 - 但为什么呢?"virtualenv"的一大吸引力在于它可以轻松便宜地制作出可重复的python环境.为什么要捣乱一个并且不确定你是否已经修复了所有内容,或者你可以再次重现它,或者当你能够制作一个新的干净的时候你是否会干扰你的生产环境? (8认同)
  • @Ned:Virtualenv不会制造可重复的环境,它会形成孤立的环境.要重现它们,您还需要以相同的方式安装所有内容,virtualenv还不够.zc.buildout在那里更好. (8认同)

Vla*_*den 44

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

  --upgrade             Upgrade the environment directory to use this version
                        of Python, assuming Python has been upgraded in-place.
Run Code Online (Sandbox Code Playgroud)

用法:

python -m venv --upgrade YOUR_VENV_DIRECTORY
Run Code Online (Sandbox Code Playgroud)

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

  • “假设 Python 已就地升级”...不幸的是,这似乎意味着如果我的系统 `python3` 指向 3.6,我无法在我的 venv 中创建 get `python3` 指向 3.7 (3认同)
  • 想要将我的 venv 从 3.9 移动到 3.11 (django 项目)。该命令没有生成任何错误,但views.py中的“print(sys.version)”仍然显示“3.9.14”。尝试使用 python -m ... python3 -m ... python3.11 -m ,结果相同。每次我停用+激活我的 venv。没有成功 (2认同)