python 模块与环境变量
python
本文字数:1.1k 字 | 阅读时长 ≈ 4 min

python 模块与环境变量

python
本文字数:1.1k 字 | 阅读时长 ≈ 4 min

1. python 模块导入

当在代码中的 import 语句执行后,首先要做的就是在不同的位置(称为模块搜索路径)寻找对应模块。这些可能的寻找位置如下:

所有这些路径都存储在系统库路径中,我们可以通过打印 sys.path 的结果看到这一点

进入到 conda 中的 mmlab 环境中,运行下面命令

(mmlab) wangyh@Ti-Sev:~$ python -m site
sys.path = [
    '/home/wangyh',
    '/home/wangyh/anaconda3/envs/mmlab/lib/python310.zip',
    '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10',
    '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/lib-dynload',
    '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/site-packages',
]
USER_BASE: '/home/wangyh/.local' (exists)
USER_SITE: '/home/wangyh/.local/lib/python3.10/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

可以看到当前python环境和相关包的信息,也就是sys.path中的内容,有运行命令的当前目录/home/wangyh,还有我当前环境mmlab中的python标准库模块xxx/envs/mmlab/lib/python3.10以及当前环境mmlab中的模块xxx/envs/mmlab/lib/python3.10/site-packages

2. 为什么要添加python环境?

假设我们当前的程序目录如下所示

- data
    - hello
        - hello.py
- data2
    - test.py

我们进入到data2文件夹下要运行test.py文件,用的环境还是上面的mmlab,那么此时我们的环境变量如下所示

'/data2'
'/home/wangyh/anaconda3/envs/mmlab/lib/python310.zip'
'/home/wangyh/anaconda3/envs/mmlab/lib/python3.10'
'/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/lib-dynload'
'/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/site-packages'

第一个环境变为了/data2是因为test.pydata2目录下,因为环境还是mmlab所以剩下的python环境不变,现在hello.py中有一个greet函数,我们想在test.py中引入此函数,即from hello import greet,但是此时会报错,No module named xxx,这是因为编译器会自动在上述环境变量中去寻找hello,但是环境变量中没有hello文件夹,此时就需要在python环境变量中添加/data/hello路径了

3. 临时添加python环境

以下两种方法都是临时添加环境变量,运行一次就失效了,如果下次还要包含此路径需要再次添加

  1. 在py程序中使用sys库
>>> import sys
>>> sys.path
['', 
'/home/wangyh/anaconda3/envs/mmlab/lib/python310.zip', 
'/home/wangyh/anaconda3/envs/mmlab/lib/python3.10', 
'/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/lib-dynload', 
'/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/site-packages']
>>> sys.path.append('/data/hello')
>>> sys.path
['', 
'/home/wangyh/anaconda3/envs/mmlab/lib/python310.zip', 
'/home/wangyh/anaconda3/envs/mmlab/lib/python3.10', 
'/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/lib-dynload',
'/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/site-packages', 
'/data/hello']

可以看到此时/data/hello就添加到python环境变量中去了

  1. export命令
    终端中添加: export PYTHONPATH=/data/hello:$PYTHONPATH 或者 export PYTHONPATH=$PYTHONPATH:/data/hello
(mmlab) wangyh@Ti-Sev:~$ python -m site
sys.path = [
    '/home/wangyh',
    '/home/wangyh/anaconda3/envs/mmlab/lib/python310.zip',
    '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10',
    '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/lib-dynload',
    '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/site-packages',
]
USER_BASE: '/home/wangyh/.local' (exists)
USER_SITE: '/home/wangyh/.local/lib/python3.10/site-packages' (doesn't exist)
ENABLE_USER_SITE: True
(mmlab) wangyh@Ti-Sev:~$ export PYTHONPATH=/data/hello:$PYTHONPATH
(mmlab) wangyh@Ti-Sev:~$ python -m site
sys.path = [
    '/home/wangyh',
    '/data/hello',
    '/home/wangyh/anaconda3/envs/mmlab/lib/python310.zip',
    '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10',
    '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/lib-dynload',
    '/home/wangyh/anaconda3/envs/mmlab/lib/python3.10/site-packages',
]
USER_BASE: '/home/wangyh/.local' (exists)
USER_SITE: '/home/wangyh/.local/lib/python3.10/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

3. 永久添加python环境

  1. 修改.bashrc文件
# 修改用户主目录下的.bashrc文件
vim ~/.bashrc

# 添加之前的环境变量
export PYTHONPATH=/data/hello:$PYTHONPATH

# 保存退出,更新环境变量使其生效
source ~/.bashrc

此方法只适用于当前用户,不适用于所有用户,比如别人登录他们的账号,他的环境变量不受影响

  1. 修改 pth 文件
    还有一种方法是修改当前环境下的一个 xx/anaconda3/envs/xxx/lib/python3.x/site-packages/xxx.pth 文件,这个我没试过就不写了

注意: 如果设置好了但是还是不生效,重开一个终端应该就就好了

5月 06, 2025
4月 06, 2025
ufw