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')

原文:

python模块以及导入出现ImportError: No module named 'xxx'问题---

关于 python ImportError: No module named 的问题---

python自定义模块导入方法,文件夹,包,文件夹的区别---

python模块导入,网上介绍的资料很多,方法也众说纷纭。根据自己的实践,感觉这个方法最简单直接,而且可以与主流的python ide生成的工程是一样的。

规则只有三条

1. 严格区分包和文件夹。包的定义就是包含__init__.py的文件夹。如果没有__init__.py,那么就是普通的文件夹。

2. 导入package。 在python 安装目录的site-package文件夹中新建xxx.pth,内容是需要导入的package所在的文件夹路径。

3. 导入模块。就是一般的模块导入写法,注意只要包路径,不要文件夹路径。

示例:

python 添加 dotenv 模块 python手动添加模块_python

以上面工程为例,

总共有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在不同目录下导入模块的方法---

Python3导入自定义模块的3种方式---

前话

最近跟着廖雪峰的教程学到 模块 这一节。关于如何自定义一个模块,如果大家不懂的话还请先看下面这篇博文 ↓

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318447437605e90206e261744c08630a836851f5183000)

模块是个好东西啊,大牛们开源共享许多模块也加快了大家开发的速度,许多开源模块可以在这里找到 ↓

https://pypi.python.org/pypi

因为刚入门所有有很多细节不懂,在网上搜寻资料的时候发现各位大神们的教程实在太过于精简,让我这个菜鸟很辛苦的才操作成功。

因此在这里记录下来。

开始

第一种,直接 import

这里有个大前提,就是你的py执行文件和模块同属于同个目录(父级目录),如下图:

python 添加 dotenv 模块 python手动添加模块_自定义_02

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是找不到自定义模块的。如下图:

python 添加 dotenv 模块 python手动添加模块_python导入自定义模块_03

执行文件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文件添加。

模块和执行文件目录结构跟上图一样:

python 添加 dotenv 模块 python手动添加模块_自定义_04

执行文件main.py在main目录下

pwcong模块在python目录下

我们创建一个 module_pwcong.pth 文件,里面内容就是 pwcong模块所在的目录:

C:\Users\Pwcong\Desktop\python

将该 module_pwcong.pth 文件放到这里:

python安装目录\Python35\Lib\site-packages

例如:

python 添加 dotenv 模块 python手动添加模块_自定义_05

然后 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