美文网首页
2020-02-22python高手之路学习随笔(7)

2020-02-22python高手之路学习随笔(7)

作者: 七天七念 | 来源:发表于2020-02-22 01:07 被阅读0次

第七章虚拟环境

介于第六章的分发 过于复杂,先学了第七章吧。

与Python打交道免不了需要很多依赖的问题,如:
1 系统中没有需要的库
2系统中没有需要的库的正确版本
3 对两个不同的应用程序可能需要同一个库的两个不同版本。
这里书上分为了2种虚拟环境一种是第三方的库:virtualenv 另一种是venv,自带的。
因为venv建立的环境不会自带pip,跟setuptools ,所以我主要学习另一个virtualenv

1 安装虚拟环境库

pip install virtualenv          

结果卡在这里好久,才发现环境库版本太高,配不上python3.37版本
这里应该

pip install virtualenv==16.4.3

2 创建虚拟环境库(名字随意)

virtualenv venv

3进入环境

liunx 版本的

source venv/bin/activate

windows 版本的就只能是通过路径直接启动了

C:\Users\Administrator\PycharmProjects\多线程练习
\venv\Scripts\activate

4退出环境

deactivate

另一个环境命令

创建环境

python -m venv myvenv

其他的跟上面的一样

结论,到3.7版本之后二者其实没多大区别了,甚至以为python跟库的版本不匹配,virtualenv 居然没有venv这个内置库好用,这是万万没想到的。

到此高手之路第七章学习完毕。

深入思考,参考其他资料,留待以后,下面的东西未来我应该用得到吧。
感兴趣的可以看下去,不感兴趣的可以过,跟高手之路关系不大了。

虚拟环境原理

1改变当前Shell的PATH

2改变Python运行时的sys.path

这里的PATH应该指的是系统path全局路径,这里临时修改成了第一项为本目录下的python晨曦
,而这里的sys,path修改,则指的是修改替换了sys.path里面的路径为虚拟环境路面的路径

以下为python:alpine镜像中,以root用户演示的例子。

改变PATH

首先看一下它的目录结构:

# ls venv
bin      include  lib
# ls /usr/local
bin      include  lib      share

环境内所有的新内容,都在这个新生成目录下。 bin是可执行文件的位置,include是C/C++的头文件位置,lib是库文件位置。 它和/usr/local内的主要目录几乎相同,也和~/.local下类似。

魔法都在两个PATH中。

# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# . venv/bin/activate
(venv) # echo $PATH
/root/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

显然,这个activate,为当前PATH增加了venv/bin这个位置在最前方,因此虚拟环境中的可执行文件拥有最高优先级。 而libinclude,仅仅是bin下面的可执行文件做相对路径运算来寻找的位置。 所以,改变了PATH,就改变了很多事。

# ls -hl venv/bin/
total 88
-rw-r--r--    1 root     root        2.0K Mar 31 08:06 activate
-rw-r--r--    1 root     root        1.1K Mar 31 08:06 activate.csh
-rw-r--r--    1 root     root        3.0K Mar 31 08:06 activate.fish
-rw-r--r--    1 root     root        1.5K Mar 31 08:06 activate.ps1
-rw-r--r--    1 root     root         986 Mar 31 08:06 activate.xsh
-rw-r--r--    1 root     root        1.5K Mar 31 08:06 activate_this.py
-rwxr-xr-x    1 root     root         238 Mar 31 08:06 easy_install
-rwxr-xr-x    1 root     root         238 Mar 31 08:06 easy_install-3.7
-rwxr-xr-x    1 root     root         220 Mar 31 08:06 pip
-rwxr-xr-x    1 root     root         220 Mar 31 08:06 pip3
-rwxr-xr-x    1 root     root         220 Mar 31 08:06 pip3.7
-rwxr-xr-x    1 root     root       35.8K Mar 31 08:06 python
-rwxr-xr-x    1 root     root        2.3K Mar 31 08:06 python-config
lrwxrwxrwx    1 root     root           6 Mar 31 08:06 python3 -> python
lrwxrwxrwx    1 root     root           6 Mar 31 08:06 python3.7 -> python
-rwxr-xr-x    1 root     root         216 Mar 31 08:06 wheel

由于优先级最高,所以环境里的pythonpip等,包括后来用pip安装的可执行文件,都使用的是venv下的。

改变sys.path

(venv) # python -m site
sys.path = [
    '/root',
    '/root/venv/lib/python37.zip',
    '/root/venv/lib/python3.7',
    '/root/venv/lib/python3.7/lib-dynload',
    '/usr/local/lib/python3.7',
    '/root/venv/lib/python3.7/site-packages',
]
USER_BASE: '/root/.local' (doesn't exist)
USER_SITE: '/root/.local/lib/python3.7/site-packages' (doesn't exist)
ENABLE_USER_SITE: False
(venv) # deactivate
# python -m site
sys.path = [
    '/root',
    '/usr/local/lib/python37.zip',
    '/usr/local/lib/python3.7',
    '/usr/local/lib/python3.7/lib-dynload',
    '/usr/local/lib/python3.7/site-packages',
]
USER_BASE: '/root/.local' (doesn't exist)
USER_SITE: '/root/.local/lib/python3.7/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

可见,sys.path发生了翻天覆地的变化。 除了当前路径/root和标准库/usr/local/lib/python3.7被保留以外,其它位置都换成了venv下的。 这就是为什么pip list看不见什么软件包的原因,也是环境隔离的最大秘密。

这玩意应该有更大的用处吧。。。

相关文章

网友评论

      本文标题:2020-02-22python高手之路学习随笔(7)

      本文链接:https://www.haomeiwen.com/subject/rzqdqhtx.html