安装pip、查看 site-packages、dist-packages 所在目录

pip 安装使用详解:http://www.ttlsa.com/python/how-to-install-and-use-pip-ttlsa
python 包:https://pypi.python.org/pypi

1、Linux 源码安装 Python3

  1. 下载源码包
    https://www.python.org/downloads/
  2. 解压(以3.64版本为例)
    wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz
    tar -zxvf Python-3.6.4.tgz
    cd Python-3.6.4
  3. 安装
    ./configure --prefix=/usr/local/python3
    make && make install 
  4. 添加软链接
    ln -s /usr/local/python3/bin/python3 /usr/bin/python3
  5. 安装第三方库
    yum install python-pip  
    pip install --upgrade pip
    python3 -m pip freeze
    python3 -m pip install redis
    python3 -m pip install pymongo
    python3 -m pip install pymysql
    python3 -m pip install configparser
    豆瓣源:
    pip Install:pip install -i https://pypi.douban.com/simple/ 

安装 pip3 ( centos )

install pip3 for python 3.x:https://www.cnblogs.com/wenchengxiaopenyou/p/5709218.html

2、安装 pip

Python 装包的几种方式

  • 1. easy_install 是最古老的包安装方式了,目前基本没有人使用。
  • 2. pip 是最主流的包管理方案,类似于 macOS 上的 brew,Ubuntu 上的 apt,CentOS 上的 yum。使用 pip install xxx 就可以从 PYPI 上搜索并安装。
  • 3. pipx 依赖 pip 和 venv,是一个专门用于安装和管理包的 CLI应用程序的工具,简化了使用 venv 或者 virtualenv 新建虚拟环境步骤,使用 pipx 安装的 Python 包会单独安装到一个全新的独有虚拟环境。
    $ python3 -m pip install --user pipx
    $ python3 -m userpath append ~/.local/bin
    # 创建虚拟环境并安装包
    $ pipx install pkg
  • 4. 如果源码中有 setup.py 文件,命令直接安装:python setup.py install
  • 5. 使用 yum。Python 包在使用 setup.py 构建的时候,对于包的发布格式有多种选项,其中有一个选项是 bdist_rpm,以这个选项发布出来的包是 rpm 的包格式。 python setup.py bdist_rpm 。对于rpm 这种格式,你需要使用 yum 或者 rpm 来安装。
    使用 yum 安装:yum install pkg
    使用 rpm 安装:rpm -ivh pkg

使用 get-pip.py 安装 (推荐)

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
pip -V    // 查看 pip 版本以及 Python 版本
// pip 20.1.1 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)


如果安装的是 python3, 则 python3 默认安装的有 pip3 ,不需要再自己安装 pip3。
pip3 安装在 python3 路径下的 bin 目录里面

如果没有,则 执行 python3 get-pip.py
pip3 -V    // 查看 pip 版本以及 Python 版本
// pip 20.1.1 from /usr/local/lib/python3.8/dist-packages/pip (python 3.8)

查看 离线帮助

执行命令:python -m pydoc -p 5200

命令行 执行 Python 代码

示例:python -c "import hashlib;print(hashlib.md5('hello').hexdigest())"

在执行任意代码前自动念一段平安经

如果对 Linux 比较熟悉,就会知道,当你在使用 SSH 远程登陆 Linux 服务器的时候?会读取 .bash_profile 文件加载一些环境变量。.bash_profile 可以视其为一个 shell 脚本,可以在这里写一些 shell 代码达到你的定制化需求。

而在 Python 中,也有类似 .bash_profile 的文件,这个文件一般情况下是不存在的。我们需要新建一个用户环境目录,这个目录比较长,不需要你死记硬背,使用 site 模块的方法就可以获取,然后使用 mkdir -p 命令创建它。

在这个目录下,新建一个 usercustomize.py 文件,注意名字必须是这个,换成其他的可就识别不到啦。usercustomize.py 的内容如

msg = r"""

                    _ooOoo_
                   o8888888o    __________________________________
                   88" . "88   |  爬虫工程师平安  后端工程师平安  |
                   (| -_- |)   |  数据分析师平安  自动化运维平安  |
                    O\ = /O    <__________________________________|
                ____/`---'\____
              .   ' \\| |// `.
               / \\||| : |||// \
             / _||||| -:- |||||- \
               | | \\\ - /// | |
             | \_| ''\---/'' | |
              \ .-\__ `-` ___/-. /
           ___`. .' /--.--\ `. . __
        ."" '< `.___\_<|>_/___.' >'"".
       | | : `- \`.;`\ _ /`;.`/ - ` : | |
         \ \ `-. \_ __\ /__ _/ .-` / /
 ======`-.____`-.___\_____/___.-`____.-'======
                    `=---='

 .............................................
          佛祖保佑             永无BUG
"""
print(msg)

3、使用 pip

安装 到 用户环境

当在机器上并没有 root 权限时,可以使用 pip install --user pkg 将包安装在你的用户环境中,该用户环境与全局环境并不冲突,并且多用户之间相互隔离,互不影响。

# 在全局环境中未安装 requests
[root@localhost ~]$ pip list | grep requests
[root@localhost ~]$ su - wangbm

# 由于用户环境继承自全局环境,这里也未安装
[wangbm@localhost ~]$ pip list | grep requests
[wangbm@localhost ~]$ pip install --user requests
[wangbm@localhost ~]$ pip list | grep requests
requests (2.22.0)
[wangbm@localhost ~]$

# 从 Location 属性可发现 requests 只安装在当前用户环境中
[wangbm@localhost ~]$ pip show requests
---
Metadata-Version: 2.1
Name: requests
Version: 2.22.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.org
Installer: pip
License: Apache 2.0
Location: /home/wangbm/.local/lib/python2.7/site-packages
[wangbm@localhost ~]$ exit
logout

# 退出 wangbm 用户,在 root 用户环境中发现 requests 未安装
[root@localhost ~]$ pip list | grep requests
[root@localhost ~]$

pip 帮助

root@kali:~$ pip -h

Usage:
  pip <command> [options]

Commands:
  install                     安装包.
  download                    下载包.
  uninstall                   卸载包.
  freeze                      按照一定格式输出已安装包的列表.
  list                        列出已经安装的包.
  show                        显示所安装包的信息.
  check                       验证已安装的包所具有的兼容依赖关系.
  search                      通过 PyPI 搜索包.
  wheel                       Build wheels from your requirements.
  hash                        计算包文件的哈希值.
  completion                  用于命令完成的助手命令。
  help                        命令帮助.

General Options:
  -h, --help                  显示帮助.
  --isolated                  Run pip in an isolated mode, ignoring environment variables and user configuration.
  -v, --verbose               更多的输出,最多可以使用3次
  -V, --version               显示版本号并退出
  -q, --quiet                 安静模式,显示最少的输出。
  --log <path>                Path to a verbose appending log.
  --proxy <proxy>             使用代理。代理格式: [user:passwd@]proxy.server:port.
  --retries <retries>         Maximum number of retries each connection should attempt (default 5 times).
  --timeout <sec>             设置 socket 超时时间。(default 15 seconds).
  --exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort.
  --trusted-host <hostname>   Mark this host as trusted, even though it does not have valid or any HTTPS.
  --cert <path>               Path to alternate CA bundle.
  --client-cert <path>        Path to SSL client certificate, a single file containing the private key and the
                              certificate in PEM format.
  --cache-dir <dir>           Store the cache data in <dir>.
  --no-cache-dir              Disable the cache.
  --disable-pip-version-check
                              Don't periodically check PyPI to determine whether a new version of pip is available for
                              download. Implied with --no-index.

如果想看 pip 中某个 命令的帮助,例如 pip list ,可以使用: pip list -h

root@kali:~$ pip list -h

Usage:
  pip list [options]

Description:
  List installed packages, including editables.

  Packages are listed in a case-insensitive sorted order.

List Options:
  -o, --outdated              List outdated packages
  -u, --uptodate              List uptodate packages
  -e, --editable              List editable projects.
  -l, --local                 If in a virtualenv that has global access, do not list globally-installed packages.
  --user                      Only output packages installed in user-site.
  --pre                       Include pre-release and development versions. By default, pip only finds stable versions.
  --format <list_format>      Select the output format among: legacy (default), columns, freeze or json.
  --not-required              List packages that are not dependencies of installed packages.

Package Index Options (including deprecated options):
  -i, --index-url <url>       Base URL of Python Package Index (default https://pypi.python.org/simple). This should
                              point to a repository compliant with PEP 503 (the simple repository API) or a local
                              directory laid out in the same format.
  --extra-index-url <url>     Extra URLs of package indexes to use in addition to --index-url. Should follow the same
                              rules as --index-url.
  --no-index                  Ignore package index (only looking at --find-links URLs instead).
  -f, --find-links <url>      If a url or path to an html file, then parse for links to archives. If a local path or
                              file:// url that's a directory, then look for archives in the directory listing.
  --process-dependency-links  Enable the processing of dependency links.

示例:  pip list --outdata   查看需要更新的 python 包

pip 常用 命令

安装包:pip install xxx

通过豆瓣源安装包:pip install -i https://pypi.douban.com/simple xxx

卸载包:pip uninstall xxx

查看包:pip show xxx

检查需要更新的包:pip list --outdated

升级包:pip install --upgrade xxx

冻结当前环境,生成安装的包的列表文件:pip freeze > requirements.txt

通过包的列表文件安装:pip install -r requirements.txt

使用 豆瓣源、清华源

清华,仅支持 HTTPS:https://pypi.tuna.tsinghua.edu.cn/simple/

清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/

阿里,HTTP 和 HTTPS 均支持

        :http://mirrors.aliyun.com/pypi/simple/
        :https://mirrors.aliyun.com/pypi/simple/

豆瓣,HTTP 和 HTTPS 均支持
        :http://pypi.doubanio.com/simple/
        :https://pypi.doubanio.com/simple/

pip 临时使用

示例:python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
示例:pip install robobrowser -i http://pypi.doubanio.com/simple/

设为默认(永久修改 )

示例:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

Linux下修改 ~/.pip/pip.conf (没有就创建,文件夹要加 “.”,表示是隐藏文件夹)。内容如下:

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com

windows 下是 C:\Users\用户名\pip\pip.ini 内容同上。

如果想配置多个镜像源平衡负载,可在已经替换 index-url 的情况下通过以下方式继续增加源站:

pip config set global.extra-index-url "<url1> <url2>..."

请自行替换引号内的内容,源地址之间需要有空格。

可用的 pypi 源列表(校园网联合镜像站):https://mirrors.cernet.edu.cn/list/pypi

正确且优雅的装包

使用 pip 来安装第三方的模块时,通常会使用这样的命令:pip install xxx 。此时如果你的环境中有 Python2 也有 Python 3,那你使用这条命令安装的包是安装 Python2 呢?还是安装到 Python 3 呢?就算你的环境上没有安装 Python2,那也有可能存在着多个版本的 Python 吧?比如安装了 Python3.8,也安装了 Python3.9,那你安装包时就会很困惑,我到底把包安装在了哪里?使用下面命令去安装,就可以安装到对应的环境中。

在python2中安装:   python -m pip install requests
在python3.8中安装:python3.8 -m pip install requests
在python3.9中安装:python3.9 -m pip install requests

通常情况下,如果同时安装了python2.x和python3.x 就会有两个pip。一个pip2一个pip3。如果 pip 版本过低,需要升级时,正确升级对应 python 解释器的 pip ( 如果有多个 Python 环境,则需要加上 python解释器的版本号)python3.9 -m pip install --upgrade pip

注意 ( 大坑 ):sudo 和 非sudo 执行 pip install 有时候安装目录不一样

        python3.9 -m pip install --upgrade pip
        sudo python3.9 -m pip install --upgrade pip

4、site-packages 和 dist-packages

有些包是安装在 site-packages 下,而有些包安装在 dist-packages 下。dist-packages 其实是 debian 系的 Linux 系统(如 Ubuntu)才特有的目录,当使用 apt 去安装的 Python 包会使用 dist-packages,而使用 pip 或者 easy_install 安装的包还是照常安装在 site-packages 下。Debian 这么设计的原因,是为了减少不同来源的 Python 之间产生的冲突。

查看 site-package 所在目录 

在 Python 交互式 Shell 中,输入以下代码以获取 site-packages 路径:

import site
print(site.getsitepackages())

from distutils.sysconfig import get_python_lib
print(get_python_lib())

查看 Python 解释器的绝对路径

import sys 
print(sys.executable)

查看当前 lib 路径

>>> import sys
>>> print(sys.path)

>>> import sys
>>> from pprint import pprint
>>> pprint(sys.path)

执行命令:python -c "print('\n'.join(__import__('sys').path))"

执行命令:python -m site

查看 Python 环境信息:python -m sysconfig

5、Python 包管理工具 PDM

PDM 是一个现代 Python 包和依赖项管理器,支持最新的 PEP 标准。但它不仅仅是一个包管理器。它在各个方面提升了您的开发工作流程。最显着的好处是它以类似的方式安装和管理软件包,根本不需要创建虚拟环境,灵活而强大的插件系统。PDM 需要 python 3.8 或更高版本。

pypi :https://pypi.org/project/pdm/

安装:pip install pdm

更新 PDM 版本:pdm self update

官网文档

初始化 PDM

执行 pdm init 就会开始初始化,初始化的时候,会让你选择项目的一些信息

  • 是否要上传 PyPI
  • 依赖的 Python 版本
  • License 类型
  • 作者信息
  • 邮箱信息

完成之后,PDM 会将你的选择以 toml 格式写入 pyproject.toml 配置文件中。

其他方案迁移到 pdm

pdm 足够好用,也足够开放,如果你当前使用的是其他的包管理器,比如 pipenv ,poetry,或者还在用最原始的 requirements.txt ,你也可以很方便的迁移到 pdm 中来:

  • 使用 pdm import -f {file} 无需初始化,直接转换
  • 执行 pdm init 或者 pdm install 的时候,会自动识别你当前的依赖情况并转换

pdm 迁移到其他方案

pyproject.toml 和 pdm.lock是 pdm 的两个核心文件。

  • 将 pyproject.toml 转成 setup.py:pdm export -f setuppy -o setup.py
  • 将 pdm.lock 转成 requirements.txt:pdm export -o requirements.txt

PDM 用法

pdm 有非常多的命令,使用 -h 可以看到帮助菜单

安装包:pdm add requests

查看包的详情:pdm show

查看包:pdm list --graph

pdm list 还有两个选项:

  • --freeze:以 requirements.txt 的格式列出已安装的包
  • --json:以 json 的格式列出已安装的包,但必须与 --graph 同时使用

删除包:pdb remove requests

项目配置:pdm config

想要修改的话,只要加 key 和 value 做为参数即可,以修改 pypi 镜像代理为例

现在改成 阿里源,只需要执行如下命令

pdm config 配置 查阅:https://pdm.fming.dev/configuration/

运行命令

在 pdm 的环境中执行命令或者项目,可以使用 run 命令,若是执行项目时,有诸多参数,可以在 pyproject.toml 配置命令别名。

查看环境

使用 info 命令,可以查看当前项目的环境信息

更新包

更新所有包:pdm update

更新某个包:pdm update <pkg>

--save-compatible:项目依赖可兼容的版本
--save-wildcard:保存通配符版本(暂不明白)
--save-exact:保存有指定确切版本的包
--save-minimum:保持最小版本的包
--update-reuse:尽量只更新命令行中指定的包,其依赖包能不更新则不更新
--update-eager:更新某个包顺带更新其依赖包(递归升级)
--prerelease:允许提前释放
--unconstrained:忽略包版本的约束,可将包升级至最新版本
--top:仅更新有在 pyproject.toml 的包
--dry-run:试运行,而不去修改 lock 文件
--no-sync:只更新 lock 文件,但不更新包

如果依赖包有设置分组,还可以指定分组进行更新:pdm update -G security -G http
也可以指定分组更新分组里的某个包:pdm update -G security cryptography
更新所有的 dev 依赖:pdm update -d    # -d 指定 dev 依赖
更新 dev 依赖下某个分组的某个包:pdm update -dG test pytest
同样地,也可以指定 --prod 或者 --production 升级非 dev (即生产)的包。

切换 py

在初始化 pdm 项目时,就已经选定了当前的 Python 版本和可用的 Python 版本范围,后面如果想更改,可以使用 use 命令,但版本要受之前设定的版本范围约束。

假设允许范围是 python 3.9+,当前使用的是 python 3.10,可以直接切换过去。

命令:pdm use python3.9

命令别名

在 pyproject.toml 添加 [tool.pdm.scripts] 可以设置快捷命令别名,若项目的执行有非常多的参数,这种设定别名的方法将很有用。

[tool.pdm.scripts] 有两种形式

# 第一种
[tool.pdm.scripts]
start = "python main.py"

# 第一种
[tool.pdm.scripts]
start = {cmd = "python main.py"}

但若想在参数中加注释,就必须得使用第二种方法,例如这样

[tool.pdm.scripts]
start = {cmd = [
    "flask",
    "run",
    # Important comment here about always using port 54321
    "-p", "54321"
]}

除了 cmd 之外,还有两个参数。

一个是 shell 参数,从输出来看你应该和看出和 cmd 的区别,和 subprocess.Popen() with shell=True 差不多一个意思

个是 env_file 参数,可以指定配置环境变量的文件

[tool.pdm.scripts]
start.cmd = "flask run -p 54321"
start.env_file = ".env"

如果想要把这个环境变量的文件不仅限于某个命令,而是 pdm run 全局,可以这样配置

[tool.pdm.scripts]
_.env_file = ".env"

加 --list 或者 -l可以查看所有设置的快捷别名

对于每一个快捷命令,都可以设置 pre 和 post 命令:

  • pre 命令:在每次快捷命令执行前会执行
  • post 命令:在每次快捷命令执行后会执行

[tool.pdm.scripts]
pre_compress = "{{ Run BEFORE the `compress` script }}"
compress = "tar czvf compressed.tar.gz data/"
post_compress = "{{ Run AFTER the `compress` script }}"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值