当前位置: 首页 > news >正文

python库文件查找详解

一、python的包的安装目录(系统级安装)

        写在前面的,如果当前的系统安装了好几个python,每个python都会有自己的库搜索路径。

1.当前工作目录

        运行 Python 脚本时,脚本所在的目录会被置于 sys.path 列表首位。Python 会优先在这个目录搜索待导入的包和模块。例如,若在 /home/user/projects 目录执行 python3 my_script.py 命令,那 /home/user/projects 即为当前工作目录。

2. Python 标准库目录

        Python 标准库是 Python 自带的模块与包集合,其所在目录会被添加到搜索路径。标准库的具体位置取决于 Python 的版本和安装方式。

        Python 3 系统级安装:标准库通常位于 /usr/lib/python3.x 目录,其中 x 代表具体的 Python 3 版本号,像 Python 3.8 的标准库就在 /usr/lib/python3.8

        但是如果系统级安装了两个python,分别是python3.8.10,和python3.8.20,这两个可能公用这个标准库目录。如果是3.8和3.9倒没有这个问题。

3. 第三方包安装目录

        第三方包会安装到系统级 Python 环境中,常见目录有 /usr/local/lib/python3.x/dist-packages 或 /usr/lib/python3.x/dist-packages。前者是使用pip安装,后者是使用apt安装。如果在使用pip安装的时候使用--user参数,那么会被安装到/home/user/.local/lib/python3.x/site-packages这个安装目录下

4.PYTHONPATH 环境变量指定的目录

     PYTHONPATH 是一个系统环境变量,你能手动设置它,把自定义目录添加到 Python 搜索路径。不同目录间用冒号(:)分隔。示例如下:

export PYTHONPATH=/path/to/my/modules:/another/path:$PYTHONPATH

5.查看的工具

(1)查看当前python的搜索路径

python -c "import sys; print('\n'.join(sys.path))"

(2)查看当前指定python下都有哪些包

# 将 /path/to/python 替换为实际的 Python 解释器路径
/path/to/python -m pip list

6.一个示例

yzh@yzh:~/app_all$ python -c "import sys; print('\n'.join(sys.path))"
# 当前的路径没有显示,但是是有的
# PYTHONPATH路径
/opt/ros/noetic/lib/python3/dist-packages
# 标准库路径
/usr/lib/python38.zip
/usr/lib/python3.8
/usr/lib/python3.8/lib-dynload
# 第三方库路径 pip install xxx --user
/home/yzh/.local/lib/python3.8/site-packages
# 第三方库路径 pip install xxx
/usr/local/lib/python3.8/dist-packages
# 第三方库路径 apt install
/usr/lib/python3/dist-packages

注意:在ros中,我有很多功能包,我编译好工作空间之后,刷新环境变量,就会将这些功能包的路径加入到PYTHONPATH中,这样这些功能包中的库文件就可以相互调用。

如:与上面相比多了/home/yzh/app_all/devel/lib/python3/dist-packages这个路径。二这个路径下有adjust_parameter等功能包,既然找到这些功能包的路径,那么就可以相互调用了。值得一提的是,一个比较好的办法就是专门写一个工具功能包,这个功能包里面写一些工具函数,给其他功能包调用。

yzh@yzh:~/app_all$ python -c "import sys; print('\n'.join(sys.path))"/home/yzh/app_all/devel/lib/python3/dist-packages
/opt/ros/noetic/lib/python3/dist-packages
/usr/lib/python38.zip
/usr/lib/python3.8
/usr/lib/python3.8/lib-dynload
/home/yzh/.local/lib/python3.8/site-packages
/usr/local/lib/python3.8/dist-packages
/usr/lib/python3/dist-packages
yzh@yzh:~/app_all$ cd /home/yzh/app_all/devel/lib/python3/dist-packages
yzh@yzh:~/app_all/devel/lib/python3/dist-packages$ ls
adjust_parameter  judge_system_pkg  mav_planning_msgs       mav_system_msgs  pose_filter  quadrotor_msgs  rotors_comm
environment       mav_msgs          mav_state_machine_msgs  plotly_msgs      quad_model   rosbag_tools    rqt_quad_gui
yzh@yzh:~/app_all/devel/lib/python3/dist-packages$ 

二、miniconda寻找包的路径

1.对于conda 的环境,当激活的时候,查询python 的路径结果如下。如果是base 不回加载(/home/yzh/.local/lib/python3.8/site-packages)。

(yolo_env) yzh@yzh:~$ python -c "import sys; print('\n'.join(sys.path))"
# 自动导入PYTHONPATH路径
/opt/ros/noetic/lib/python3/dist-packages
# 标准库路径
/home/yzh/miniconda3/envs/yolo_env/lib/python38.zip
/home/yzh/miniconda3/envs/yolo_env/lib/python3.8
/home/yzh/miniconda3/envs/yolo_env/lib/python3.8/lib-dynload
# 在默认情况下,Python 解释器启动时,会将用户级别的包安装目录(通常是 #~/.local/lib/pythonX.Y/site-packages,其中 X.Y 代表 Python 版本号)添加到 sys.path 列表#里。这个目录用于存放用户使用 pip install --user 命令安装的第三方包。它把这个也给导入了。不同用##户可能这个路径不同
/home/yzh/.local/lib/python3.8/site-packages
# 这个就是第三方库路径,pip下载的库默认在这里。
/home/yzh/miniconda3/envs/yolo_env/lib/python3.8/site-packages

2.激活环境的默认启动文件和关闭环境的默认恢复文件。

        当激活一个conda环境的时候,会自动执行miniconda3/envs/当前环境/etc/conda/activate.d文件夹下创脚本,会自动执行这个脚本。当退出的时候,再miniconda3/envs/当前环境/etc/conda/deactivate.d下创脚本,退出环境时候会自动执行这个脚本。

        下面是一个例子:

        etc下面没有conda文件夹,后面的文件夹和文件需要自己创建。

(1).创建文件

# 创建激活脚本目录
mkdir -p ~/miniconda3/envs/my_conda_env/etc/conda/activate.d# 创建激活脚本文件
touch ~/miniconda3/envs/my_conda_env/etc/conda/activate.d/set_pythonnousersite.sh# 编辑激活脚本
nano ~/miniconda3/envs/my_conda_env/etc/conda/activate.d/set_pythonnousersite.sh

 (2).添加内容

#!/bin/bash
# 保存当前的 PYTHONPATH
export OLD_PYTHONPATH=$PYTHONPATH
# 保存当前的 PYTHONNOUSERSITE
export OLD_PYTHONNOUSERSITE=$PYTHONNOUSERSITE
# 清除 PYTHONPATH
unset PYTHONPATH
# 设置 PYTHONNOUSERSITE
export PYTHONNOUSERSITE=1
echo "Activation script is running. Cleared PYTHONPATH and set PYTHONNOUSERSITE."

(3). 创建停用脚本

# 创建停用脚本目录
mkdir -p ~/miniconda3/envs/my_conda_env/etc/conda/deactivate.d# 创建停用脚本文件
touch ~/miniconda3/envs/my_conda_env/etc/conda/deactivate.d/restore_pythonpath.sh# 编辑停用脚本
nano ~/miniconda3/envs/my_conda_env/etc/conda/deactivate.d/restore_pythonpath.sh

(4).修改停用脚本

#!/bin/bash
# 恢复之前的 PYTHONPATH
if [ -n "$OLD_PYTHONPATH" ]; thenexport PYTHONPATH=$OLD_PYTHONPATH
elseunset PYTHONPATH
fi
# 恢复之前的 PYTHONNOUSERSITE
if [ -n "$OLD_PYTHONNOUSERSITE" ]; thenexport PYTHONNOUSERSITE=$OLD_PYTHONNOUSERSITE
elseunset PYTHONNOUSERSITE
fi
# 删除临时变量
unset OLD_PYTHONPATH
unset OLD_PYTHONNOUSERSITE
echo "Deactivation script is running. Restored PYTHONPATH and PYTHONNOUSERSITE."

通过上面的做法,在启动一个虚拟环境的时候,之后默认加载虚拟环境自己的库文件路径。

三、注意事项

对于PATH这个环境变量,这个环境变量存的是一些可执行文件的路径,使用which python的时候,搜索的就是PATH这个环境变量的路径。它会从前往后找,如果前面的找到了,后面的就不找了。这个坑了我很久,所以当你向PATH加东西的时候,考虑一下加在前面还是加在后面。

相关文章:

  • (33)VTK C++开发示例 ---图片转3D
  • 系统思考:企业效率提升关键
  • TensorRt10学习第一章
  • 数据结构-树(二叉树、红黑、B、B+等)
  • Sentry 异常捕获
  • 【数据分享】2020年中国高精度森林覆盖数据集(免费获取)
  • QMK机械键盘固件开发指南:从源码到实践
  • ffmpeg 元数据
  • Python 常用内置函数详解(七):dir()函数——获取当前本地作用域中的名称列表或对象的有效属性列表
  • stm32数码管显示数字/循环
  • 【Redis】Another Redis Desktop Manager 安装指南
  • podman/docker国内可用的docker镜像源(2025-05)
  • Linux btop 使用教程
  • Wireshark抓取SMTP协议报文
  • 如何提升自我执行力?
  • Linux51 安装baidunetdisk yum install rpm -ivh
  • 中科院:通过内部表示优化LLM上下文利用
  • 图解 Git 工作流:理解 Rebase、Merge 与 Pull Request 的区别
  • 21 课时精通生成式 AI:微软官方入门指南详解
  • 【设计模式】GoF设计模式之备忘录模式(Memento Pattern)
  • 全红婵/陈芋汐夺得跳水世界杯总决赛女子双人10米台冠军
  • 北部艳阳高照、南部下冰雹,五一长假首日上海天气很“热闹”
  • 拍摄《我们这一代》的肖全开展“江浙沪叙事”
  • 中国银行副行长刘进任该行党委副书记
  • 2025厦门体育产业采风活动圆满举行
  • 知名计算机专家、浙江大学教授张森逝世