ubuntu下Python导入自定义模块的方法
当在python程序中导入自定义模块时,若出现“Import Error:no module named xxx”表明系统在python的搜索路径(PYTHONPATH)中找不到该模块,需要把该模块添加到python的搜索路径中。
要用import mymodule导入自定义的模块,其必须在python的搜索路径中,一般有三种方法可以采用:
1.将你自定义的模块(.py文件)放置在python的任意搜索路径下(可以在python中输入import sys和sys.path 查看搜索路径)
2.修改环境变量PYTHONPATH以包含用户自定义模块的路径
临时修改:在终端输入export PYTHONPATH=/mymodule directory:$PYTHONPATH
,利用echo $PYTHONPATH 命令可查看是否将路径添加成功。该方法在当前终端下有效,但若关闭终端后重新打开,则会失效。
彻底修改:要想使修改始终有效,则需要修改用户或系统的环境变量配置文件。以修改用户的环境变量配置文件.bashrc或.profile为例(两个文件均在用户主目录下/home/用户名,.bahsrc包含专用于你的bash shell的bash信息,当登录以及每次打开新的shell时,该文件被读取;.profile包含专用于你的shell信息,当用户登录时,该文件仅仅执行一次,它设置一些环境变量,执行用户的.bashrc文件)。cd到用户主目录下,打开.bashrc或.profile文件,在末尾添加一行export PYTHONPATH=/mymodule directory:$PYTHONPATH,保存退出后,执行source .bashrc 或source .profile命令使修改生效。修改系统环境变量配置文件的过程也类似,只不过相应的文件要到/etc 目录下去找。
vi ~/.bashrc
export PYTHONPATH=$PYTHONPATH:/data/xm/jinnanbisai/project/code/Detectron/detectron/core
source ~/.bashrc
3.修改python的sys.path变量,在导入自定义模块前,执行以下操作。此方法也只能临时起作用,退出python下次再进来就失效了。
import sys
sys.path.append('mymodule directory')
原文:https://blog.csdn.net/Blateyang/article/details/78753051
python模块以及导入出现ImportError: No module named 'xxx'问题---https://blog.csdn.net/damotiansheng/article/details/43916881
关于 python ImportError: No module named 的问题---https://my.oschina.net/leejun2005/blog/109679
python自定义模块导入方法,文件夹,包,文件夹的区别---https://blog.csdn.net/a583179/article/details/79084195
python模块导入,网上介绍的资料很多,方法也众说纷纭。根据自己的实践,感觉这个方法最简单直接,而且可以与主流的python ide生成的工程是一样的。
规则只有三条
1. 严格区分包和文件夹。包的定义就是包含__init__.py的文件夹。如果没有__init__.py,那么就是普通的文件夹。
2. 导入package。 在python 安装目录的site-package文件夹中新建xxx.pth,内容是需要导入的package所在的文件夹路径。
3. 导入模块。就是一般的模块导入写法,注意只要包路径,不要文件夹路径。
示例:
以上面工程为例,
总共有4个包,分别是:package,package1, package2, folder2.(注意,folder1不是package,因为它没有__init__.py)。
这些包所在的文件夹共有两个,test以及test/folder1。 注意,package2所在的文件夹是test,虽然它是包含在folder2里面,但是folder2是一个包,不是一个文件夹。
因此在site-package中新建一个XXX.pth, 里面添加上test以及test/folder1的绝对路径即可。
使用pth文件,在 site-packages 文件中创建 .pth文件,将模块的路径写进去,一行一个路径,以下是一个示例,pth文件也可以使用注释:
# .pth file for the my project(这行是注释)
E:\DjangoWord
E:\DjangoWord\mysite
E:\DjangoWord\mysite\polls
模块导入比较简单,只要依次填包名就可以了,但注意只要包名
如果需要导入module2,则import folder2.package2.module2
如果需要导入module1,则import package1.module1 注意,路径中没有folder1,因为folder1是文件夹,不是包。
Python在不同目录下导入模块的方法---https://blog.csdn.net/zhili8866/article/details/52980924
Python3导入自定义模块的3种方式---https://blog.csdn.net/pwc1996/article/details/52577148
前话
最近跟着廖雪峰的教程学到 模块 这一节。关于如何自定义一个模块,如果大家不懂的话还请先看下面这篇博文 ↓
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318447437605e90206e261744c08630a836851f5183000)
模块是个好东西啊,大牛们开源共享许多模块也加快了大家开发的速度,许多开源模块可以在这里找到 ↓
https://pypi.python.org/pypi
因为刚入门所有有很多细节不懂,在网上搜寻资料的时候发现各位大神们的教程实在太过于精简,让我这个菜鸟很辛苦的才操作成功。
因此在这里记录下来。
开始
第一种,直接 import
这里有个大前提,就是你的py执行文件和模块同属于同个目录(父级目录),如下图:
main.py 和 pwcong模块同在python目录
执行文件为main.py
pwcong文件夹为一个模块
我把pwcong模块提供的函数写在 __init__.py 里,里面只提供一个 hi 函数:
#pwcong 模块的 __init__.py#-*- coding: utf-8 -*-
defhi():print("hi")
执行文件main.py直接import模块:
#main.py#-*- coding: utf-8 -*-
importpwcong
pwcong.hi()
接着我们运行一下main.py可以看到命令行窗口输出了一句 hi ,第一种方式完成。
使用模块方式为:先导入-》接着输入模块.变量|函数, 如上面例子的 pwcong.hi()
第二种,通过sys模块导入自定义模块的path
如果执行文件和模块不在同一目录,这时候直接import是找不到自定义模块的。如下图:
执行文件main.py在main目录下
pwcong模块在python目录下
sys模块是python内置的,因此我们导入自定义模块的步骤如下:
先导入sys模块
然后通过sys.path.append(path) 函数来导入自定义模块所在的目录
导入自定义模块。
这时候 main.py 这样写:
#main.py#-*- coding: utf-8 -*-
importsys
sys.path.append(r"C:\Users\Pwcong\Desktop\python")importpwcong
pwcong.hi()
最后执行main.py文件,最终输出 hi ,第二种方式完成。
第三种,通过pth文件找到自定义模块
这个方法原理就是利用了系统变量,python会扫描path变量的路径来导入模块,可以在系统path里面添加。但是我还是推荐使用pth文件添加。
模块和执行文件目录结构跟上图一样:
执行文件main.py在main目录下
pwcong模块在python目录下
我们创建一个 module_pwcong.pth 文件,里面内容就是 pwcong模块所在的目录:
C:\Users\Pwcong\Desktop\python
将该 module_pwcong.pth 文件放到这里:
python安装目录\Python35\Lib\site-packages
例如:
然后 main.py 导入并使用自定义模块:
#-*- coding: utf-8 -*-
importpwcong
pwcong.hi()
最后执行 main.py 文件,可以输出 hi ,第三种方式完成。
结束!
调用文件中的包中包的模块
cd /home/xm/anaconda3/envs/py27/lib/python2.7/site-packages
vi module_detectron.pth
编辑内容:/data/xm/jinnanbisai/project/code/Detectron