转自:http://doudouclever.blog.163.com/blog/static/1751123102011722246231/

如何将路径“永久"添加到sys.path?

sys.path是python的搜索模块的路径集,是一个list

可以在python 环境下使用sys.path.append(path)添加相关的路径,但在退出python环境后自己添加的路径就会自动消失了!

可以使用以下命令输入当前python 的搜索路径:

python -c"import sys;print '当前的python是:'+sys.prefix;print '\n'.join(sys.path)"

练习使用sys.path.append方法添加路径,显示退出python会消失!

python -c"import sys;print '当前的python是:'+sys.prefix;sys.path.append(r'E:\DjangoWord' ) ;print '\n'.join(sys.path)"

再次运行,会发现 自己添加路径E:\DjangoWord()不存在了!

python -c"import sys;print '当前的python是:'+sys.prefix;print '\n'.join(sys.path)"

为解决这个问题,可以有以下方法:

将自己做的py文件放到 site_packages 目录下:

下面命令显示了 site-packages 目录:

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib() "

但是这样做会导致一个问题,即各类模块都放到此文件夹的话,会导致乱的问题,这一点是显而易见的。

注意,也不创建子文件夹,再将自己的模块放到子文件夹解决问题,这会导致使用import 语句时错误。

使用pth文件,在 site-packages 文件中创建 .pth文件,将模块的路径写进去,一行一个路径,以下是一个示例,pth文件也可以使用注释:

# .pth file for the  my project(这行是注释)

E:\DjangoWord

E:\DjangoWord\mysite

E:\DjangoWord\mysite\polls

这个不失为一个好的方法,但存在管理上的问题,而且不能在不同的python版本中共享。

使用PYTHONPATH环境变量,在这个环境变量中输入相关的路径,不同的路径之间用逗号(英文的!)分开,如果PYTHONPATH 变量还不存在,可以创建它!

路径会自动加入到sys.path中,而且可以在不同的python版本中共享,应该是一样较为方便的方法。

关于与python相关的环境变量有那些,请参考:

http://docs.python.org/using/cmdline.html   在页面上找到PYTHONPATH

以下是该环境变量的描述:

PYTHONPATH?

Augment the default search path for module files. The format is the same as the shell’s PATH : one or more directory pathnames separated by os.pathsep (e.g. colons on Unix or semicolons on Windows). Non-existent directories are silently ignored.

In addition to normal directories, individual PYTHONPATH entries may refer to zipfiles containing pure Python modules (in either source or compiled form). Extension modules cannot be imported from zipfiles.

The default search path is installation dependent, but generally begins with prefix /lib/python version (see PYTHONHOME above). It is always appended to PYTHONPATH .

An additional directory will be inserted in the search path in front of PYTHONPATH as described above under Interface options . The search path can be manipulated from within a Python program as the variable sys.path .

转自:http://book.51cto.com/art/201005/198555.htm

动态地改变Python搜索路径

《Python Cookbook(第2版)中文版》第2章文件,本章呈现了操作文件中的数据以及操纵文件系统下的文件和目录的一些技术,还包括了处理特定的文件格式以及存档格式的内容,比如tar和zip格式。本节为大家介绍动态地改变Python搜索路径。

2.21  动态地改变Python搜索路径

感谢:Robin Parmar

任务

模块必须处于Python搜索路径中才能被导入,但你不想设置个永久性的大路径,因为那样可能会影响性能,所以,你希望能够动态地改变这个路径。

解决方案

只需简单地在Python的sys.path中加入一个"目录",不过要小心重复的情况:

  
  1. def AddSysPath(new_path):
  2. """ AddSysPath(new_path):给Python的sys.path增加一个"目录"
  3. 如果此目录不存在或者已经在sys.path中了,则不操作
  4. 返回1表示成功,-1表示new_path不存在,0表示已经在sys.path中了
  5. already on sys.path.
  6. """
  7. import sys, os
  8. # 避免加入一个不存在的目录
  9. if not os.path.exists(new_path): return -1
  10. # 将路径标准化。 Windows是大小写不敏感的,所以若确定在
  11. # Windows下,将其转成小写
  12. new_path = os.path.abspath(new_path)
  13. if sys.platform == 'win32':
  14. new_pathnew_path = new_path.lower( )
  15. # 检查当前所有的路径
  16. for x in sys.path:
  17. x = os.path.abspath(x)
  18. if sys.platform == 'win32':
  19. xx = x.lower( )
  20. if new_path in (x, x + os.sep):
  21. return 0
  22. sys.path.append(new_path)
  23. # 如果想让new_path在sys.path处于最前
  24. # 使用:sys.path.insert(0, new_path)
  25. return 1
  26. if _ _name_ _ == '_ _main_ _':
  27. # 测试,显示用法
  28. import sys
  29. print 'Before:'
  30. for x in sys.path: print x
  31. if sys.platform == 'win32':
  32. print AddSysPath('c:\\Temp')
  33. print AddSysPath('c:\\temp')
  34. else:
  35. print AddSysPath('/usr/lib/my_modules')
  36. print 'After:'
  37. for x in sys.path: print x

讨论

模块要处于Python搜索路径中的目录里才能被导入,但我们不喜欢维护一个永久性的大目录,因为其他所有的Python脚本和应用程序导入模块的时候性能都会被拖累。本节代码动态地在该路径中添加了一个"目录",当然前提是此目录存在而且此前不在sys.path中。

sys.path是个列表,所以在末尾添加目录是很容易的,用sys.path.append就行了。当这个append执行完之后,新目录即时起效,以后的每次import操作都可能会检查这个目录。如同解决方案所示,可以选择用sys.path.insert(0,…,这样新添加的目录会优先于其他目录被import检查。

即使sys.path中存在重复,或者一个不存在的目录被不小心添加进来,也没什么大不了,Python的import语句非常聪明,它会自己应付这类问题。但是,如果每次import时都发生这种错误(比如,重复的不成功搜索,操作系统提示的需要进一步处理的错误),我们会被迫付出一点小小的性能代价。为了避免这种无谓的开销,本节代码在向sys.path添加内容时非常谨慎,绝不加入不存在的目录或者重复的目录。程序向sys.path添加的目录只会在此程序的生命周期之内有效,其他所有的对sys.path的动态操作也是如此。

python中sys.path详解相关推荐

  1. Python中sys模块详解

    sys.argv           命令行参数List,第一个元素是程序本身路径  sys.modules.keys() 返回所有已经导入的模块列表  sys.exc_info()     获取当前 ...

  2. python之sys模块详解_(转)python之os,sys模块详解

    python之sys模块详解 原文:http://www.cnblogs.com/cherishry/p/5725184.html sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和 ...

  3. python的抽象类详解_第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类...

    第7.19节 Python中的抽象类详解:abstractmethod.abc与真实子类 一. 引言 前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不是以继 ...

  4. 【 Python 中 int 用法详解】(转载)

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

  5. Python 中 int 用法详解

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

  6. Python中self用法详解

    Python中self用法详解 https://blog.csdn.net/CLHugh/article/details/75000104 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 V ...

  7. python中的字符串详解(附实现文字跑马灯效果)

    python中的字符串详解 1.什么是字符串 ​ 相信大家对字符串应该是再熟悉不过了吧,因为日常生活中的一句话,或是路边的一则广告,其实它都相当于一个字符串,而顾名思义,字符串也就是一串串的由零个或多 ...

  8. python中的GIL详解

    python中的GIL详解 参考Python-- GIL 锁简述 GIL是什么 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念.就 ...

  9. Python 中 with 用法详解

    浅谈 Python 的 with 语句:https://developer.ibm.com/zh/articles/os-cn-pythonwith/ python3,浅谈with的神奇魔法:http ...

最新文章

  1. centos7 LNMP
  2. 音视频技术开发周刊(第130期)
  3. vmware中装的ubuntu上不了网
  4. 2021中国泛知识付费行业报告
  5. (26)Vue.js组件通信—props 命名规则
  6. Mysql通过一个限制条件,查出多条不同的记录
  7. [120_移动开发Android]007_android开发之SAX操作XML文件
  8. stm32 串口通信数据移位寄存器_STM32串口接RS485丢码问题已解决*_*
  9. java addbatch_使用addBatch java时丢失数据
  10. 国货之光!百度飞桨与华为麒麟重磅合作
  11. mysql 数据类型总结
  12. 基于SSD目标检测模型的人脸口罩识别
  13. 数据挖掘-基于随机森林模型的企业偷漏税纳税人识别
  14. 一种圆面积公式的推导方法
  15. Linux_Learning_兄弟连
  16. 基于PHP和mysql的简单学生成绩管理系统
  17. HTML小游戏20 —— html5版开心斗地主小游戏(附完整源码)
  18. python函数中self的作用_在Python中self的用途是什么?
  19. cPanel创建数据库教程
  20. linux宝塔视频教程,linux 宝塔面板安装rtmp简陋教程 (已加视频版教程)

热门文章

  1. AutoForm v4.11-ISO 1CD(专业板金优化分析软件,好用!)
  2. Sequence和Item
  3. Explicit Intent Implicit Intent
  4. 人员定位系统如何赋能智慧电厂转型?
  5. 入门视频处理2:mts格式怎么转换成MP4格式
  6. 哈希 :哈希冲突、负载因子、哈希函数、哈希表、哈希桶
  7. 重新认识质量管理原则
  8. Swift 3 新变化
  9. 文件加密—巧用闪灵文件夹锁隐藏视频
  10. Python——阶乘