如何使用不同的 python 版本创建 venv

Dar*_*018 67 python-3.x python-venv

我的机器中有不同的 venv,其中有 python 3.10。

现在对于一个特定的项目,我意识到 python 3.10 不适合,因为一些库仍然不兼容。因此,当为新项目创建新的 venv 时,我想将 python 降级,比如降级到 3.8,仅针对这个特定的 venv。

我怎样才能做到这一点?我应该在终端上输入什么来执行此操作?

PS:我使用VS及其终端来创建venv

Emi*_*ter 56

python.org 推荐的方式

自 Python 3.5 以来,管理虚拟环境的推荐方法是使用venvPython 标准库本身内的模块。

来源:https ://docs.python.org/3/library/venv.html#creating-virtual-environments

virtualenv这与 Python 标准库之外的第三方包不同。

来源: https: //pypi.org/project/virtualenv/

降级(和升级)存在危险

根据您的系统本身是否使用Python,更改系统Python版本可能会对系统稳定性造成危险。您的系统可能正好需要该版本的 Python。Ubuntu 也是如此。


Ubuntu 的说明

在 Ubuntu 20.04 上测试

安装另一个版本的Python

比降级或升级更安全的是在同一系统上安装其他版本的 Python。

例如,要安装 Python 3.9:

# Add the deadsnakes repository
me@mydevice:~$ sudo add-apt-repository ppa:deadsnakes/ppa

# Update package lists
me@mydevice:~$ sudo apt update

# Install Python 3.9
me@mydevice:~$ sudo apt install python3.9
Run Code Online (Sandbox Code Playgroud)

安装venv包并创建venv虚拟环境

# Install the venv package for Python 3.9
me@mydevice:~$ sudo apt install python3.9-venv

# Make a folder for venv virtual environments
me@mydevice:~$ mkdir ~/.venvs

# Create a new venv virtual environment with Python 3.9 in it
me@mydevice:~$ python3.9 -m venv ~/.venvs/my-venv-name

# Activate the new venv
me@mydevice:~$ source ~/.venvs/my-venv-name/bin/activate
(my-venv-name) me@mydevice:~$
Run Code Online (Sandbox Code Playgroud)

检查 venv 虚拟环境中的版本

# Check the Python version inside the venv:
(my-venv-name) me@mydevice:~$ python -V
Python 3.9.9

# Check the Pip version inside the venv:
(my-venv-name) me@mydevice:~$ pip3 --version
pip 21.2.4 from /home/me/.venvs/my-venv-name/lib/python3.9/site-packages/pip (python 3.9)
Run Code Online (Sandbox Code Playgroud)

停用 venv 虚拟环境

(my-venv-name) me@mydevice:~$ deactivate
me@mydevice:~$
Run Code Online (Sandbox Code Playgroud)

检查任何虚拟环境之外的版本

# Check Python version:
me@mydevice:~$ python -V
Python 3.8.10

# Check the Pip version:
me@mydevice:~$ pip3 --version
pip 20.0.2 from /home/me/.venvs/my-venv-name/lib/python3.8/site-packages/pip (python 3.8)
Run Code Online (Sandbox Code Playgroud)

安装更多Python版本

要安装更多 Python 版本,只需将版本号从 3.9 更改为您选择的版本(可从 deadsnakes 存储库中获取)。

  • 这个答案仅适用于 Ubuntu(问题没有这样标记),依赖于仅适用于 Ubuntu *LTS* 的第三方 ppa,尽管它声称绝不是“python.org 推荐的方式” 。我不知道为什么它的投票如此之高。 (4认同)

csm*_*ter 42

简单且最近

假设您的系统中安装了不同版本的 Python。要检查,请使用以下命令进行检查:

> py --list
 -3.10-64 *
 -3.7-64
Run Code Online (Sandbox Code Playgroud)

您想在“test_env”目录中为 python 3.7 创建一个新的虚拟环境。运行以下命令:

> py -3.7 -m venv test_env
Run Code Online (Sandbox Code Playgroud)

然后通过在 Windows PowerShell 上运行以下命令来激活 test_env:

> .\test_env\Scripts\Activate.ps1
Run Code Online (Sandbox Code Playgroud)

或者Linux:

$ source test_env/bin/activate
Run Code Online (Sandbox Code Playgroud)

查看:

python --version
Python 3.7.0
Run Code Online (Sandbox Code Playgroud)

  • 这里的“py”命令指的是[Windows 的Python启动器](https://docs.python.org/3/using/windows.html#launcher) (16认同)
  • 这应该是被接受和最多支持的答案。这是非常干净、简单且不拘一格的。 (6认同)
  • 我同意这是最好的答案 (3认同)
  • 这不是最好的答案,因为我的系统上不存在此命令。 (2认同)

Nat*_*ncy 12

我相信单独使用不同 python 版本的最佳方法是pyenv ,管理虚拟环境可以使用pyenv-virtualenv来完成。

我认为Real Python 的这篇文章很好地解释了如何管理不同的 python 版本以及不同的虚拟环境。

对于后代,使用上面提到的工具,您可以执行以下操作(一旦安装了正确的 python 版本)

pyenv virtualenv <python_version> <environment_name>

# Then activate it 

pyenv local <environment_name>
Run Code Online (Sandbox Code Playgroud)

现在您已经在该文件夹中创建了虚拟环境,因此您每次进入该文件夹时都应该拾取它。根据其文档,VSCode 也应该选择它。

PS:我认为这是一个很好的方法,因为它允许您使用单个工具管理 python 版本以及环境。每个版本仅在一个位置安装一次,这应该会有所帮助,因为它降低了复杂性。

  • 我相信 pyenv 已被弃用 - https://docs.python.org/3/whatsnew/3.6.html#whatsnew36-venv (2认同)
  • 这是指“pyvenv”,而不是“pyenv”,这是一个不同的工具@DannyK (2认同)

小智 9

您可以同时安装多个Python版本,并且可以使用所需版本创建虚拟环境。确保您已经安装了所需的 python 版本,然后在创建虚拟环境时指定其位置:

virtualenv -p <path-to-new-python-installation> <new-venv-name>
Run Code Online (Sandbox Code Playgroud)

例子:

virtualenv -p  C:\Users\ssharma\AppData\Local\Programs\Python\Python38\python.exe venv38
Run Code Online (Sandbox Code Playgroud)

这将创建一个名为 Python 3.8 的虚拟环境venv38

  • 非常感谢。所以我需要任何方法来下载python 3.8。我以为有一个像 downgrade 或 smtg 这样的命令来获取它,而无需自己手动下载。 (2认同)

Paa*_*sen 5

您可以使用水蟒:

conda create -n mypython3.8 python=3.8
Run Code Online (Sandbox Code Playgroud)

只是为了你的炖菜里有足够的粥。