python环境维护

python环境维护

[TOC]

包的管理

总结一下Python使用过程中的环境管理心得.持续更新中.

不使用conda的原因

  1. pip上的库更全(与之相伴的是稳定性不确定).
  2. 按需配置,conda里有的功能都可以手动/自带实现.不需要搞一个大而全的环境占磁盘.
  3. 越接近官方与底层的效率上限越高(只是一种追求,代码能力才是最短的那块板).
  4. 爱折腾.

pip的使用(python自带)

python2与python3各自对应自己的pip,因此有运行2种方式不同的pip.

  1. python2 -m pip install或者python3 -m pip install
  2. 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

  1. 安装pip

    通用

    1
    2
    curl 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,setuptools

    ubuntu下

    1
    sudo apt-get install python-pip/python3-pip
  2. 查询

    1
    2
    3
    4
    5
    6
    7
    8
    pip -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 #导出当前包及其版本.
  3. 安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    pip 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
    ...
  4. 升级

    1
    2
    3
    4
    5
    pip 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 #如果上面升级命令出现问题,可以使用
  5. 卸载

    1
    pip uninstall <pkg>
  6. 配置文件
    不同操作系统位置不同,若不存在自行创建即可

    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
  7. 下载

    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,用网速换磁盘空间.

使用

  1. 安装
    python -m pip install virtualenv

  2. 创建目录

  3. 创建一个独立的Python运行环境,命名为venv:

    1
    2
    3
    virtualenv -p /usr/bin/python3.5 --no-site-packages venv 
    #-p 指定虚拟环境python版本
    #--no-site-packages(已经安装到系统Python环境中的所有第三方包都不会复制过来,如果virtualenv版本大于20,默认此选项可以省略)

    输出如下:

    1
    2
    3
    4
    5
    6
    created 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

  4. 激活
    source venv/bin/activate
    命令提示符变化,有个(venv)前缀,表示当前环境是一个名为venv的Python环境.

  5. 使用
    pip install ...

  6. 退出
    deactivate

  7. 删除:整个删除文件夹即可,不会影响到其他.
    rm -rf PATH

管理

列出所有环境
locate -b '\activate' | grep "/home"
This will grab all Python virtual environments present inside your home directory.

或者使用pyenv包.

多版本python的切换

Linux下

  1. 手动改变软链接

    1
    2
    3
    whereis python
    rm /usr/bin/python
    ln -s /usr/bin/python3.6 /usr/bin/python
  2. 采用指令update-alternatives(目前使用的方式)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    update-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版本
  3. 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.

  4. py文件指定版本#!/usr/bin/python

Windows下

  1. 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

作者

cx

发布于

2021-07-26

更新于

2022-02-27

许可协议