python|virtual

Posted by Elli0t on 2020-07-05

virtualenv是一个非常流行的工具,它为Python库创建独立的Python环境。

pyenv用于隔离python版本。例如,您可能想用python 2.6、2.7、3.3、3.4和3.5测试代码,因此您需要一种在它们之间切换的方法。

pyvenv是随python 3一起提供的脚本,但在python3.6中已弃用,因为它存在问题(更不用说混淆的名称)。在python 3.6+中,确切的等价物是python3 -m venv。

pyenv-virtualenv是pyenv的插件,与pyenv的作者相同,可以方便地同时使用pyenv和virtualenv。但是,如果您使用的是python 3.3或更高版本,如果有可用的话,pyenv-virtualenv将尝试运行python -m venv,而不是virtualenv。

venv是随python 3一起提供的一个包,您可以使用python3 -m venv运行它(尽管出于某些原因,一些发行版将它分离成一个单独的发行版包,如ubuntu/debian上的python3-venv)。它的用途与virtualenv相似,工作方式也非常相似,但不需要复制周围的python二进制文件(在Windows上除外)。如果不需要支持python 2,可以使用这个。

这些工具中的大多数是相互补充的。

pyenv

install

pyenv-installer

1
2
$ curl https://pyenv.run | bash
$ exec $SHELL

use

基本用法

1
2
3
4
5
6
7
8
pyenv install --list  #查看可安装的 python version
pyenv install <version> #安装特定的 python version
pyenv versions #查看 pyenv 已经安装的 python version
pyenv local <version> #设置当前路径使用的版本
pyenv global <version> #设置全局使用的版本
pyenv activate <名称> #手动激活指定 virtualenv
pyenv deactivate #手动反激活当前已被激活的 virtualenv
pyenv virtualenv-delete <名称> #使用virtualenv-delete命令删除指定virtualenv

使用virtualenv安装虚拟环境

创建一个使用3.8.1版本Python的virtualenv,名为hello_world

pyenv virtualenv 3.8.1 hello_world

这条命令会在$(pyenv root)/versions目录下创建一个hello_world目录。

然后,实现名为hello_world的virtualenv的自动激活。

新建存放项目代码的目录,我把它放在$HOME下的hello_world目录,并进入。

1
2
3
cd ~
mkdir hello_world
cd hello_world

创建.python-version文件,在其中写上当前virtualenv的名字(可通过pyenv versions命令查看所有可用virtualenv)。

1
2
3
pyenv versions
echo 'hello_world' >> .python-version
pyenv activate

现在,你的命令行开头应该会显示(hello_world)字样,表示当前virtualenv环境已激活。

1
2
3
4
5
╭─ybm911@Mr ~/project1
╰─$ pyenv activate hello_world
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
(hello_world) ╭─ybm911@Mr ~/project1
╰─$

venv

1
2
mkdir test && cd test
python3 -m venv project_venv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
╭─ybm911@Mr ~/project1
╰─$ python3 -m venv project_env 2 ↵
╭─ybm911@Mr ~/project1
╰─$ ls
project_env
╭─ybm911@Mr ~/project1
╰─$ cd project_env
╭─ybm911@Mr ~/project1/project_env
╰─$ ls
bin include lib pyvenv.cfg
╭─ybm911@Mr ~/project1/project_env
╰─$ source bin/activate
(project_env) ╭─ybm911@Mr ~/project1/project_env
╰─$
(project_env) ╭─ybm911@Mr ~/project1/project_env
╰─$ which python
/Users/ybm911/project1/project_env/bin/python
(project_env) ╭─ybm911@Mr ~/project1/project_env
╰─$ pip list
Package Version
---------- -------
pip 19.2.3
setuptools 41.2.0
WARNING: You are using pip version 19.2.3, however version 20.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
(project_env) ╭─ybm911@Mr ~/project1/project_env
╰─$ pip freeze
(project_env) ╭─ybm911@Mr ~/project1/project_env
╰─$ pip install requests
Collecting requests
Downloading https://files.pythonhosted.org/packages/45/1e/0c169c6a5381e241ba7404532c16a21d86ab872c9bed8bdcd4c423954103/requests-2.24.0-py2.py3-none-any.whl (61kB)
|████████████████████████████████| 71kB 522kB/s
Collecting chardet<4,>=3.0.2 (from requests)
Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
|████████████████████████████████| 143kB 691kB/s
Collecting idna<3,>=2.5 (from requests)
Downloading https://files.pythonhosted.org/packages/a2/38/928ddce2273eaa564f6f50de919327bf3a00f091b5baba8dfa9460f3a8a8/idna-2.10-py2.py3-none-any.whl (58kB)
|████████████████████████████████| 61kB 444kB/s
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests)
Downloading https://files.pythonhosted.org/packages/e1/e5/df302e8017440f111c11cc41a6b432838672f5a70aa29227bf58149dc72f/urllib3-1.25.9-py2.py3-none-any.whl (126kB)
|████████████████████████████████| 133kB 570kB/s
Collecting certifi>=2017.4.17 (from requests)
Downloading https://files.pythonhosted.org/packages/5e/c4/6c4fe722df5343c33226f0b4e0bb042e4dc13483228b4718baf286f86d87/certifi-2020.6.20-py2.py3-none-any.whl (156kB)
|████████████████████████████████| 163kB 827kB/s
Installing collected packages: chardet, idna, urllib3, certifi, requests
Successfully installed certifi-2020.6.20 chardet-3.0.4 idna-2.10 requests-2.24.0 urllib3-1.25.9
WARNING: You are using pip version 19.2.3, however version 20.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
(project_env) ╭─ybm911@Mr ~/project1/project_env
╰─$ pip freeze
certifi==2020.6.20
chardet==3.0.4
idna==2.10
requests==2.24.0
urllib3==1.25.9
(project_env) ╭─ybm911@Mr ~/project1/project_env
╰─$ pip freeze > requirements.txt
(project_env) ╭─ybm911@Mr ~/project1/project_env
╰─$ cat requirements.txt
certifi==2020.6.20
chardet==3.0.4
idna==2.10
requests==2.24.0
urllib3==1.25.9
(project_env) ╭─ybm911@Mr ~/project1/project_env
╰─$ deactivate
╭─ybm911@Mr ~/project1/project_env
╰─$
#最后删除虚拟环境删除文件夹就行了

Whoever said money can’t solve your problems?

Must not have had enough money to solve ‘em

They say “Which one?” I say “Nah, I want all of ‘em”

参考链接

https://zhuanlan.zhihu.com/p/104006925

https://blog.csdn.net/Lazybones_3/article/details/106587801