贡献者: addis
pip
是 python 的默认包管理器,最广泛使用。另外也可以用 conda,但不能免费商用。
python
在运行时从哪里搜索包(module)?如果 import
命令搜不到,会出现错误 ModuleNotFoundError
。答案是在(import sys
)sys.path
中,而其中列出的路径按优先级有三个来源:1. 当前路径. 2. 环境变量 PYTHONPATH
。3. sys.path
中的其他默认路径。这可以直接在代码中修改,如 sys.path.append('some/folder')
。
模块名.__file__
查看 module 的文件路径。
sudo apt install python3 python3-pip
pip3 ...
和 python3 -m pip ...
应该是一样的,见这里。
pip3 install numpy
pip3 list
列出所有包,pip3 show 包名
列出某个包的信息,包括安装路径。
pip3 uninstall 包名
wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz
解压 tar -xvf Python-3.6.3.tgz
,cd Python-3.6.3
,apt-get install build-essential zlib1g-dev
,./configure
,make
(可以加 -j4
选项),make install
就可以了。检查版本:python3.6 -V
,但安装 3.10
的时候会出现编译错误。
Python Package Index (PyPI)
是 pip
中安装包的主要来源(注意区分 PyPy
)。
pip3 install 包名称
中的名称未必是 import 包名称
的名称! 如果找不到前者,会提示 Could not find a version that satisfies the requirement
python
命令的路径一般是 /usr/bin/python
,它是一个 soft link,链接到具体版本。注意如果直接修改这个连接可能会发生一些错误(导致 lsb_release
不能用等)
module
的代码中,如果 module 是被 import 的,那么 __name__
(被 import 以后就是 包名.__name__
)是包的名字,但是如果 module 是作为 script 来执行的(python3 -m 包名
),那么 __name__
就是 '__main__'
,在 module 中,if __name__ == '__main__'
可以用于判断到底是哪种情况。
python3 test.py
),那么 __name__
同样也是 '__main__'
。
python3 -m 包名称 参数...
相当于把 module import 以后再 run as script。
有时候我们希望同一个 .py
文件既可以作为脚本直接执行也可以作为模块被导入,并且希望该文件可以根据这两种方式自动选择执行什么。这时可以用 __name__
来判断:
./my_module.py
或者 python3 my_module.py
或者 python3 -m my_module
,就会得到(-m
选项把模块作为脚本运行)
若在同目录下进入 python3 运行 import my_module
(或者 import my_module as 其他名字
),就会得到
再来写另一个模块调用上面的模块
在同目录打开命令行,运行
import
一个包时,Python 以什么顺序在哪些路径搜索所需的包呢?参考官方文档。
import site
和 site.getsitepackages()
查看。 例如 Ubuntu22.04 下 pip
的默认安装目录为 /usr/local/lib/python3.10/dist-pakages
,但如果没有管理员权限,会安装到用户文件夹的 ~/.local/lib/python3.10/site-packages
中。
pip show 包名
可以查到包的安装路径。
友情链接: 超理论坛 | ©小时科技 保留一切权利