python如何修改PYTHONPATH环境变量

 更新时间:2023年08月02日 11:27:30   作者:harry_tea  
这篇文章主要介绍了python如何修改PYTHONPATH环境变量问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

查看当前python环境

我们进入到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的安装目录xxx/envs/mmlab/lib/xxx,也就是说默认的python在导入module的时候,默认从当前目录下以及当前环境目录下来搜索

为什么要添加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路径了

添加python环境

1.临时添加

程序中加入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环境变量中去了,一旦脚本运行完毕,此环境变量就失效了,如果要再次使用需要再次运行

2.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

可以看到添加python环境变量之后多了/data/hello,但是只对于当前终端生效,一旦终端关闭立刻失效,如果要重新添加需要重新export

永久生效

1.修改.bashrc文件

# 修改用户主目录下的.bashrc文件
vim ~/.bashrc
# 添加之前的环境变量
export PYTHONPATH=/data/hello:$PYTHONPATH
# 保存退出,更新环境变量使其生效
source ~/.bashrc

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

2.修改pth文件

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

注意!!!!!

根据我的经验,不知道是设置问题还是操作问题,如果你的python环境变量不是当前conda环境的路径,比如本来应该是xxx/envs/mmlab/xxx,但是变成了xxx/anaconda3/lib/python3.x/xxx这种路径,那么多半是终端开的比较多啥的。。。

或者开了好多窗口export乱了,终端都关了重新打开就好了,当时的我反正一脸疑惑。。。

这还会带来一个问题,就是如果你在当前环境安装包的话,他会安装到别的地方,所以就直接把终端都关了重新打开来解决问题就行。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python编程实现的简单神经网络算法示例

    Python编程实现的简单神经网络算法示例

    这篇文章主要介绍了Python编程实现的简单神经网络算法,结合实例形式分析了神经网络算法的原理及Python相关算法实现技巧,需要的朋友可以参考下
    2018-01-01
  • python之多种方式传递函数方法案例讲解

    python之多种方式传递函数方法案例讲解

    这篇文章主要介绍了python之多种方式传递函数方法案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • python处理图片之PIL模块简单使用方法

    python处理图片之PIL模块简单使用方法

    这篇文章主要介绍了python处理图片之PIL模块简单使用方法,涉及Python使用PIL模块实现针对图片的锐化、绘制直线、绘制椭圆等相关技巧,需要的朋友可以参考下
    2015-05-05
  • 如何在python中使用selenium的示例

    如何在python中使用selenium的示例

    这篇文章主要介绍了如何在python中使用selenium的示例,selenium提供了一个通用的接口,可模拟用户来操作浏览器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Pycharm最全报错的原因与解决方法总结(推荐!)

    Pycharm最全报错的原因与解决方法总结(推荐!)

    这篇文章主要给大家介绍了关于Pycharm最全报错的原因与解决方法的相关资料,文中记录了Python各种报错解释及处理方法,属于个人记录型,需要的朋友可以参考下
    2022-07-07
  • 一文详解PyQt5中信号(Signal)与槽(Slot)

    一文详解PyQt5中信号(Signal)与槽(Slot)

    信号(Signal)与槽(Slot)是Qt中的核心机制,也是在PyQt编程中对象之间进行通信的机制。这篇文章主要带大家了解一下信号(Signal)与槽(Slot)的使用,需要的可以参考一下
    2022-12-12
  • 浅谈dataframe两列相乘构造新特征

    浅谈dataframe两列相乘构造新特征

    这篇文章主要介绍了dataframe两列相乘构造新特征,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Python学习之异常处理详解

    Python学习之异常处理详解

    正常情况下,我们的程序是自上而下的逐行执行,执行到最后一行才会终止程序的执行。而异常的情况会导致我们的程序半途而废停止了执行。本文将通过示例详细讲解Python中的异常处理,感兴趣的可以学习一下
    2022-03-03
  • 使用Python将数组的元素导出到变量中(unpacking)

    使用Python将数组的元素导出到变量中(unpacking)

    最近工作中遇到一个问题,需要利用Python将数组(list)或元组(tuple)中的元素导出到N个变量中,现在将我实现的方法分享给大家,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-10-10
  • Python数据结构之链表详解

    Python数据结构之链表详解

    在顺序存储方式中,根据数据元素的序号就可随机存取表中任何一个元素,但同时在插入和删除运算需要移动大量的元素,造成算法效率较低。解决此缺陷的一个办法是:对线性表采用链式存储方式。本文将介绍链式存储结构的特点以及各种基本操作的实现。需要的可以参考一下
    2022-01-01

最新评论