Python的包管理器
PyPI · The Python Package Index https://pypi.org/
pip是一个python包,用来管理python的包,python -m xxx就是执行名为xxx的python包的意思,这个xxx包一般放在site-packages下面。具体请参见Python的__main__.py,实现这个文件可以让你「运行一个文件夹」,包就是一个文件夹,那么也就可以「运行一个包了」
python -m pip install PyYAML -i https://pypi.douban.com/simple # 查看安装的package (pandas)的信息 # 可以通过这个方式查看包的依赖关系(依赖哪些包 & 被哪些包依赖) python -m pip show pandas # 查看package (pandas)的可用版本 python -m pip index versions pandas # 安装并指定版本 python -m pip install pandas==1.3.4 # 安装requirements.txt python -m pip install -r requirements.txt # 卸载 python -m pip uninstall pandas # 列出所有已经安装的package python -m pip list
以可视化的方式查看已经安装的pip包之间的依赖关系
AI:
pipdeptree:
pipdeptree 是一个命令行工具,可以帮助你以树状图的形式查看一个 Python 环境中所有安装的包及其依赖关系。
安装命令:pip install pipdeptree
使用命令:pipdeptree 或 pipdeptree -g(生成图形化的输出,需要 Graphviz 支持)。
列出需要的包,以及版本条件,可以使用pip一次性安装
首先,安装python3,默认不带pip3的情况应该是比较少的。以下的例子环境为:使用apt的Linux
如果没有pip3我们可以:
使用pip安装的包被放在哪里了呢?
# 全局Python
anny@annys-MacBook-Air ~ % which python3
/Library/Frameworks/Python.framework/Versions/3.11/bin/python3
anny@annys-MacBook-Air ~ % ls /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/
README.txt filelock-3.16.1.dist-info setuptools
_distutils_hack pip setuptools-65.5.0.dist-info
distlib pip-24.3.1.dist-info virtualenv
distlib-0.3.9.dist-info pkg_resources virtualenv-20.28.0.dist-info
distutils-precedence.pth platformdirs
filelock platformdirs-4.3.6.dist-info
anny@annys-MacBook-Air ~ % python3 -m site
sys.path = [
'/Users/anny',
'/Library/Frameworks/Python.framework/Versions/3.11/lib/python311.zip',
'/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11',
'/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/lib-dynload',
'/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages',
]
USER_BASE: '/Users/anny/Library/Python/3.11' (doesn't exist)
USER_SITE: '/Users/anny/Library/Python/3.11/lib/python/site-packages' (doesn't exist)
ENABLE_USER_SITE: True
# 虚拟环境 venv
anny@annys-MacBook-Air ~ % source ~/pyenv/py311/bin/activate
(py311) anny@annys-MacBook-Air ~ % python -m site
sys.path = [
'/Users/anny',
'/Library/Frameworks/Python.framework/Versions/3.11/lib/python311.zip',
'/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11',
'/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/lib-dynload',
'/Users/anny/pyenv/py311/lib/python3.11/site-packages',
]
USER_BASE: '/Users/anny/Library/Python/3.11' (doesn't exist)
USER_SITE: '/Users/anny/Library/Python/3.11/lib/python/site-packages' (doesn't exist)
ENABLE_USER_SITE: False
我们在使用[python -m xxx]这个指令的时候,xxx是如何被找到的呢?
首先:xxx可以对应xxx.py或者xxx/__main__.py
那么寻找的路径呢?当前 Python 环境的 sys.path(一般情况下,sys.path 包含当前目录、虚拟环境 site-packages、全局 site-packages、标准库等)