python环境维护
[TOC]
包的管理
总结一下Python使用过程中的环境管理心得.持续更新中.
不使用conda的原因
- pip上的库更全(与之相伴的是稳定性不确定).
- 按需配置,conda里有的功能都可以手动/自带实现.不需要搞一个大而全的环境占磁盘.
- 越接近官方与底层的效率上限越高(只是一种追求,代码能力才是最短的那块板).
- 爱折腾.
pip的使用(python自带)
python2与python3各自对应自己的pip,因此有运行2种方式不同的pip.
python2 -m pip install
或者python3 -m pip install
pip install
或者pip3 install
下面都是假定python2
下的pip.
pip安装位置:your_path/python2.7/dist-packages
,例如ubuntu下/usr/lib/python2.7/dist-packages
pip cheat sheet
最详细的还是pip -h
安装pip
通用
1
2curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py #下载安装脚本
sudo python get-pip.py pip==9.0.2 wheel==0.30.0 setuptools==28.8.0 #安装指定版本pip,wheel,setuptoolsubuntu下
1
sudo apt-get install python-pip/python3-pip
查询
1
2
3
4
5
6
7
8pip -V --version #版本
pip -v --verbose #Give more output
pip -q, --quiet #Give less output
pip list
pip list -o(--outdated) #当前环境中可升级的包.
pip show -f pkg #查询一个包的(-f 详细)内容.
pip search pkg #查询pypi上含有某名字的包.
pip freeze >requirement.txt #导出当前包及其版本.安装
1
2
3
4
5
6
7
8
9
10
11pip install <pkg> #从pypi上搜索下载并安装python包.
pip install -r requirements.txt #从依赖包列表中安装.
pip install --no-index --find-links=/local/wheels -r requirements.txt #可以指定本地目录中安装软件包,而不从pypi上安装.
pip install wheel #安装本地包.
pip wheel --wheel-dir=/local/wheels -r requirements.txt #安装本地包.
pip install pkg>=2.1.2 #限定版本.
pip install -c constraints.txt #Constrain versions using the given constraints file. This option can be used multiple times.
pip install --proxy [user:passwd@]http_server_ip:port <pkg> #指定代理服务器安装
pip install -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple <pkg> #使用指定源安装一次
pip install --user <pkg> #安装到制定用户环境中
pip install --default-timeout=100 <pkg> #指定等待时长requirements.txt格式:
1
2
3
4
5
6
7
8
9
10...
singledispatch==3.6.2
six==1.16.0
typing==3.10.0.0
uTidylib==0.3
virtualenv==20.6.0
webencodings==0.5
WebOb==1.7.3
zipp==1.2.0
...升级
1
2
3
4
5pip install --upgrade <pkg>
pip install --upgrade-strategy -eager <pkg> #升级全部依赖包.
pip install --upgrade-strategy -only-if-need <pkg> #只有当旧版本不能适配新的父依赖包时,才会升级.pip10.0版本之后选项的默认值.
pip install -U pip #升级 pip.
sudo easy_install --upgrade pip #如果上面升级命令出现问题,可以使用卸载
1
pip uninstall <pkg>
配置文件
不同操作系统位置不同,若不存在自行创建即可1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# Linux/Unix:
/etc/pip.conf
~/.pip/pip.conf
~/.config/pip/pip.conf
# Mac OSX:
~/Library/Application Support/pip/pip.conf
~/.pip/pip.conf
/Library/Application Support/pip/pip.conf
# Windows:
%APPDATA%\pip\pip.ini
%HOME%\pip\pip.ini
C:\Documents and Settings\All Users\Application Data\PyPA\pip\pip.conf (Windows XP)
C:\ProgramData\PyPA\pip\pip.conf (Windows7及以后)示例,推荐豆瓣源,还有阿里,清华源
1
2
3
4
5
6
7
8
9
10[global]
timeout = 60
index-url = http://pypi.douban.com/simple
# 替换出自己的代理地址,格式为[user:passwd@]proxy.server:port
proxy=http://xxx.xxx.xxx.xxx:8080
[install]
# 信任镜像源,否则会有警告
trusted-host=pypi.doubanio.com下载
1
pip download --destination-directory /local/wheels -r requirements.txt #在不安装软件包的情况下下载软件包到本地.
包环境隔离工具-virtualenv
原理:把系统Python复制一份到virtualenv
的环境,用命令source venv/bin/activate
进入一个virtualenv
环境时,virtualenv
会修改相关环境变量,让命令python和pip均指向当前的virtualenv
环境.
因此隔离环境太多的话,磁盘空间可能告急.最好的策略是维护一个主环境,遇到特殊的环境再新建vitualenv.或者对于不常用的环境pip freeze >requirement.txt
,用网速换磁盘空间.
使用
安装
python -m pip install virtualenv
创建目录
创建一个独立的Python运行环境,命名为
venv
:1
2
3virtualenv -p /usr/bin/python3.5 --no-site-packages venv
#-p 指定虚拟环境python版本
#--no-site-packages(已经安装到系统Python环境中的所有第三方包都不会复制过来,如果virtualenv版本大于20,默认此选项可以省略)输出如下:
1
2
3
4
5
6created virtual environment CPython3.5.2.final.0-64 in 304ms
creator CPython3Posix(dest=/home/rgs/Desktop/1.code/RL/RL, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, setuptools=bundle, pip=bundle, wheel=bundle, via=copy, app_data_dir=/home/rgs/.local/share/virtualenv)
added seed packages: pip==20.3.4, setuptools==50.3.2, wheel==0.36.2
activators CShellActivator,PowerShellActivator,XonshActivator,PythonActivator,FishActivator,BashActivator激活
source venv/bin/activate
命令提示符变化,有个(venv)前缀,表示当前环境是一个名为venv的Python环境.使用
pip install ...
退出
deactivate
删除:整个删除文件夹即可,不会影响到其他.
rm -rf PATH
管理
列出所有环境locate -b '\activate' | grep "/home"
This will grab all Python virtual environments present inside your home directory.
或者使用pyenv包.
多版本python的切换
Linux下
手动改变软链接
1
2
3whereis python
rm /usr/bin/python
ln -s /usr/bin/python3.6 /usr/bin/python采用指令update-alternatives(目前使用的方式)
1
2
3
4
5
6
7
8
9
10update-alternatives --display python
#查看是否存在python可选项并添加
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2
#添加Python2可选项,优先级为2,优先级高的数字大,此处设置python2优先级高于python3
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 1
#添加Python3可选项,优先级为1
sudo update-alternatives --config python
#更改python系统版本
sudo update-alternatives --remove python /usr/bin/python2.7
#移除python版本pyenv的使用(待探索)
Python版本管理工具.pyenv可以改变全局的Python版本,在系统中安装多个版本的 Python,设置目录级别的Python版本,还能创建和管理virtual python environments.所有的设置都是用户级别的操作,不需要sudo命令.同时,pyenv还可以管理virtualenv
通过pyenv-virtualenv
命令.原理:
没有使用将不同的$PATH
植入不同的shell这种高耦合的工作方式,而是简单地在$PATH
的最前面插入了一个垫片路径(shims):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin
.所有对Python可执行文件的查找都会首先被这个shims路径截获,从而使后方的系统路径失效.使用:TBC.
py文件指定版本
#!/usr/bin/python
Windows下
- pyenv(TBC)
高级环境维护-Docker
TBC
参考
https://www.liaoxuefeng.com/wiki/1016959663602400/1019273143120480
https://www.runoob.com/w3cnote/python-pip-install-usage.html
https://bbs.huaweicloud.com/forum/thread-85164-1-1.html
https://einverne.github.io/post/2017/04/pyenv.html