环境变量:PYTHONPATH

大家在编写模块的时候,总会遇到这么一个问题:把模块放到安装目录下的Lib目录里面就可以正常使用了,可是过了几天重装了Python,自己写的模块也没了,然后就是感觉身体被掏空,心情极度难受,精神非常崩溃,毕竟自己辛辛苦苦写的库没了。

要想防止这种情况发生,唯有备份!但是我们来设想一个情况,你的Python装了好多个库,自己又写了好多库,因为磁盘空间有限,自己写的库只能放在另一个盘里面了。遇到这种情况有些人会想到使用虚拟环境,虚拟环境的切换可是相当繁琐的,而且虚拟环境无法和真实环境绑定在一起!

既不用虚拟环境,也不能把模块放在相应的目录下,解释器就会找不到啊!怎么办?确实找不到,至于为什么?我首先要介绍一下sys模块的path变量,如图所示。

这个变量是一个list,里面的每一个元素都是字符串,其实观察字符串的内容,大家能够发现字符串就是路径,第一个空字符串表示当前路径,sys.path就是告诉python解释器去它里面所用的路径下寻找模块。现在假设现有的这些路径因为某种原因不能往里面塞东西了,需要另外一个路径,该怎么办?有些人会把模块放在当前项目所在的路径,这么做只能对当前项目起作用,如果另一个项目也需要用这个项目里面的模块,就需要把模块复制过去,这样就会有大量的模块重复;有些人会想得很简单,既然是一个列表,append新路径绝对没问题!确实没问题,但这样只能临时修改sys.path!(重新启动就会失效)我想要永久性的的告诉解释器我自己定义的路径该怎么做呢?!这就需要使用环境变量PYTHONPATH。windows添加环境变量非常容易,在此我就不做演示了。环境变量添加完成后如图所示。

变量的值不一定要和我一样,但变量名一定要和我一样!我这里变量的值是D:\Python\Lib,就是告诉解释器要去D盘下的Python目录下的Lib目录中查找。注意:如果创建或修改环境变量PYTHONPATH之后,sys.path也会发生变化,永久性变化!目前的sys.path的结果如图所示。

大家可以看到D:\Python\Lib已经在其中了。既然环境变量设置了,大家第一个反应就是到底设置的环境变量有没有起作用。这种问题编写一个简单的模块测试一下就知道了,编写模块如图所示。

为了方便测试,模块里面就只有一个简单的函数。在测试之前,首先要去检查一下,看看有没有模块重名。我保证,我这里绝对没有。实际上检查就是去sys.path所列的每个路径进行检查就行,要确保遍历之后只有一个名为hello的模块。

然后就是测试,测试过程非常简单,如图所示。

分析测试结果发现没有问题。最后再扯一点关于设置PYTHONPATH环境变量的其他原因,其实我刚开始说的磁盘空间不足的情况比较少见,但是这并不意味着使用PYTHONPATH环境变量很少见,我们来看下面一种情况。假设Python是系统管理员安装的,而你是一个普通用户,你也不知道管理员账号密码,你只能用python,不能修改python的安装目录下的内容,这个时候PYTHONPATH环境变量就发挥作用了!我们可以发现,使用PYTHONPATH环境变量可以更好地管理我们自己编写的模块,做到不丢失,不重复,存放路径自由!

本文分享自微信公众号 - Python机器学习算法说书人(Python-ML-Algorithm),作者:小陈学Python

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python多版本共存

    我相信有许多人一个操作系统装了好几个Python,有些人可以随便切换,有些人装了好多个不管怎样只能用一个,其他的就是用不了!所以Python的多版本共存有必要系...

    不可言诉的深渊
  • 万能的XML(1):初次实现

    之前提到过XML,现在该更详细的讨论它了。在这个项目中,你将看到XML可用来表示各种类型的数据,以及如何使用Simple API for XML(SAX)来处理...

    不可言诉的深渊
  • 遗传算法可视化项目(6):用PyQt5实现数据可视化

    昨天讲了一下Python和C语言交互,没有看昨天或者之前的文章点一下历史消息或者这里:

    不可言诉的深渊
  • 【JS】382- JavaScript 模块化方案总结

    本文包含两部分,第一部分通过简明的描述介绍什么是 CommonJS、AMD、CMD、UMD、ES Module 以及它们的常见用法,第二部分则根据实际问题指出在...

    pingan8787
  • 陌陌2015年战略级产品“现场”是什么鬼?我怎么看?

    9月7日陌陌推出音乐互动直播平台—陌陌现场,《我是歌手》原音乐总监梁翘柏担任首席内容官。其实在之前梁翘柏入职陌陌时,就有传言说陌陌要做音乐直播类产品,现在终于尘...

    罗超频道
  • 06-STM32+ESP8266+AIR202远程升级方案-移植STM32+ESP8266实现利用http或https远程更新STM32程序到自己的项目(定时访问升级,备份升级)

    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_B/" f...

    杨奉武
  • CentOS7.7部署k8s + Prometheus(1 master + 2 node)

    k8s部署参考之前的文章 CentOS7.7部署k8s(1 master + 2 node)

    后端云
  • Windows环境变量编辑器

    对于程序员来说,很多时候都需要添加环境变量,对于window10以下系统的,特别很多人用的window7系统,编辑环境变量比较麻烦。

    无道
  • API管理-舍弃springfox-swagger-ui,采用功能更加丰富的swagger-bootstrap-ui

    上一篇博客(API管理-基于SpringBoot项目集成swagger实现接口文档自动生成)中我已经提到过使用springfox-swagger-ui的部分问题...

    秋日芒草
  • 学界 | 伯克利 AI 实验室博客发布首篇文章:让神经网络自行选择模块,实现动态推理

    深度神经网络虽然在图像,语音,机器人等方面取得了巨大的成功,但是这些成功通常局限在识别任务或者生成任务中,对于推理任务,常规的神经网络通常是无能为力的。伯克利A...

    AI科技评论

扫码关注云+社区

领取腾讯云代金券