Python关于导入模块的一些感想: (转)为Python添加默认模块搜索路径

写项目的时候,碰到这种情况

Python关于导入模块的一些感想:
(转)为Python添加默认模块搜索路径

程序业务为core,里面有两个目录,core1 和core2  core1中有三个模块,business  main   main1 

程序入口为bin目录下的project模块

导入方式:  main1 要使用main模块的main方法  from main import main

                 而main模块中的main方法又使用了business的b1方法   from business import b1

如果要在project模块中使用main1方法  下面这样写执行就会报错:ModuleNotFoundError: No module named 'main'

import os,sys
ATM_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  # C:UsersAdministratorPycharmProjects15grouplevel_3exam_level3project
sys.path.append(ATM_PATH)
from core.core1.main1 import main1

问题来了,,,,单个测试main1  main  都没有问题,而从project去调用main1就有问题了呢?????

...........一番忙活,自己建模块各种测试+网上查资料终于找到原因:

报错是因为模块搜索路径为C:UsersAdministratorPycharmProjects15grouplevel_3exam_level3project ,执行到main1的时候发现from  main  import  main语句  按照project路径找不到main了所以报错。。

那么我可以在模块里面都按照这个路径来写:from core.core1.main1 import main1, from core.core1.main import main,from core.core1.business import b1

这样联合测试是没有问题了。可是单个测试又出现模块找不到的问题。那么有没有办法可以让联合测试和单个测试都能通过呢????请看下面

这里涉及到一个PYTHONPATH的东西,它是Python的模块搜索路径。可以通过sys.path查看:而且不同的目录执行PATHONPATH有所不同例如:

C:UsersAdministratorPycharmProjects15grouplevel_3exam_level3projectin  #执行路径
C:UsersAdministratorPycharmProjects15group
C:UsersAdministratorAppDataLocalProgramsPythonPython36python36.zip
C:UsersAdministratorAppDataLocalProgramsPythonPython36DLLs
C:UsersAdministratorAppDataLocalProgramsPythonPython36lib
C:UsersAdministratorAppDataLocalProgramsPythonPython36
C:UsersAdministratorAppDataLocalProgramsPythonPython36libsite-packages
C:UsersAdministratorPycharmProjects15grouplevel_3exam_level3projectcorecore1   #  执行路径
C:UsersAdministratorPycharmProjects15group
C:UsersAdministratorAppDataLocalProgramsPythonPython36python36.zip
C:UsersAdministratorAppDataLocalProgramsPythonPython36DLLs
C:UsersAdministratorAppDataLocalProgramsPythonPython36lib
C:UsersAdministratorAppDataLocalProgramsPythonPython36
C:UsersAdministratorAppDataLocalProgramsPythonPython36libsite-packages

而且用sys.path.append()去添加PYTHONPATH只在当前程序运行过程生效

因此就会出现上述的错误。那么改进方法慢慢想一想可以找到,我是这样做的:在core1下建一个__init__文件,因为执行project的时候会import到core1文件,就会执行__init__文件

Python关于导入模块的一些感想:
(转)为Python添加默认模块搜索路径

__init__中的代码:

import sys,os
ATM_PATH = os.path.dirname(os.path.abspath(__file__))  
#C:UsersAdministratorPycharmProjects15grouplevel_3exam_level3projectcorecore1
sys.path.append(ATM_PATH)

这样达到的效果就是联合测试  和 单个测试都可以通过

再看看怎样添加PYTHONPATH路径:

 

原文出处:https://www.douban.com/note/334738164/

方法一:函数添加
1 import sys
2 查看sys.path
3 添加sys.path.append("c:\")

方法二:修改环境变量。 ????网上搜的跟第一种一样
w用户可以修改系统环境变量PYTHONPATH

方法三:增加.pth文件,推荐!
在site-packages添加一个路径文件,如mypkpath.pth,必须以.pth为后缀,写上你要加入的模块文件所在的目录名称就是了。
 1 windows
    c:python27site-packages
# 我们的学员把pth文件直接放在c:python27
# (或其他python安装目录)目录下测试也是有效的
# 2015.9.23
  2 linux(ubuntu)
   /usr/local/lib/python2.7/dist-packages  (note by shanql, 我是放在这个目录下有效的,所添加的目录一定要存在,不存在则会不成功)
2 linux(redhat)
   /usr/lib/python2.7/site-packages

以下是另一篇文章:http://blog.sina.com.cn/s/blog_59ba44680100z0mt.html

学习python不久,碰到个问题,怎么样把自己写的模块加入到python默认就有的搜索路径中呢?不要每次非得import sys; sys.path.append(‘/home/fightlikekobe/python’)才可。

上网找了很多久未果,都来我自己糊里糊涂找到了解决方法,那就是在dist-packages(即/usr/local/lib/python2.7/dist-packages)添加一个路径文件,如mypkpath.pth,必须以.pth为后缀,写上你要加入的文件名称就是了,如我的:

/home/fightlikekobe/python

保存退出,OK!结果自己验证,重启terminal,再次打开python,

>>> import sys
>>> sys.path
['/home/fightlikekobe', '/usr/bin', '/usr/local/lib/python2.7/dist-packages/pymysql_sa-1.0-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/PyMySQL-0.5-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/hiredis-0.1.0-py2.7-linux-i686.egg', '/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.7.3-py2.7-linux-i686.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages', '/home/fightlikekobe/python', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/ubuntuone-client', '/usr/lib/python2.7/dist-packages/ubuntuone-control-panel', '/usr/lib/python2.7/dist-packages/ubuntuone-couch', '/usr/lib/python2.7/dist-packages/ubuntuone-installer', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol', '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']

原文出处:https://www.douban.com/note/334738164/

方法一:函数添加
1 import sys
2 查看sys.path
3 添加sys.path.append("c:\")

方法二:修改环境变量。 ????网上搜的跟第一种一样
w用户可以修改系统环境变量PYTHONPATH

方法三:增加.pth文件,推荐!
在site-packages添加一个路径文件,如mypkpath.pth,必须以.pth为后缀,写上你要加入的模块文件所在的目录名称就是了。
 1 windows
    c:python27site-packages
# 我们的学员把pth文件直接放在c:python27
# (或其他python安装目录)目录下测试也是有效的
# 2015.9.23
  2 linux(ubuntu)
   /usr/local/lib/python2.7/dist-packages  (note by shanql, 我是放在这个目录下有效的,所添加的目录一定要存在,不存在则会不成功)
2 linux(redhat)
   /usr/lib/python2.7/site-packages

以下是另一篇文章:http://blog.sina.com.cn/s/blog_59ba44680100z0mt.html

学习python不久,碰到个问题,怎么样把自己写的模块加入到python默认就有的搜索路径中呢?不要每次非得import sys; sys.path.append(‘/home/fightlikekobe/python’)才可。

上网找了很多久未果,都来我自己糊里糊涂找到了解决方法,那就是在dist-packages(即/usr/local/lib/python2.7/dist-packages)添加一个路径文件,如mypkpath.pth,必须以.pth为后缀,写上你要加入的文件名称就是了,如我的:

/home/fightlikekobe/python

保存退出,OK!结果自己验证,重启terminal,再次打开python,

>>> import sys
>>> sys.path
['/home/fightlikekobe', '/usr/bin', '/usr/local/lib/python2.7/dist-packages/pymysql_sa-1.0-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/PyMySQL-0.5-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/hiredis-0.1.0-py2.7-linux-i686.egg', '/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.7.3-py2.7-linux-i686.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages', '/home/fightlikekobe/python', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/ubuntuone-client', '/usr/lib/python2.7/dist-packages/ubuntuone-control-panel', '/usr/lib/python2.7/dist-packages/ubuntuone-couch', '/usr/lib/python2.7/dist-packages/ubuntuone-installer', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol', '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']