Python导入自定义模块

在python中我们会将函数封装在不同的python文件中,并将不同功能的python文件放在不同的目录下(此处可以误认为时包下)

例如一个项目testP目录结构如下

testP

|_ test1

       |_ test11

               |_ test111.py

               |_ test112.py

               |_ __init__.py

       |_ test12

               |_ test121.py

               |_ test122.py

               |_ __init__.py

|_ __init__.py

如果在test11目录下没有__init__.py那么该目录就只是不同的目录,当存在该py文件时,才会被py理解为是一个包,模块;

请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是当前的目录名称

方式一通过sys模块导入自定义模块的path

如果test12中的test121.py想使用test11中的test111.py;那么需要在test121中导入test111 语句如下

from test1.test11 import test111 as te

当使用idea跑工程时没有问题 如果脱离idea就会包导入错误 错误信息如下

      Traceback (most recent call last):
        File "pictures/functionMain/myPredicted.py", line 6, in
         from pictures.functionLib import myReadPictures as mr
      ImportError: No module named 'pictures'

这是需要使用代码将模块所在的追加到path后 在test121.py中

import sys
import argparse

sys.path.append("/testP/test1")

=======================以上方式亲测 可以使用==================

方式二通过pth文件找到自定义模块

这个方法原理就是利用了系统变量,python会扫描path变量的路径来导入模块,可以在系统path里面添加。但是我还是推荐使用pth文件添加。

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

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

/home/user/testP/test1/test11

将该 module_test11.pth 文件放到这里: 
python安装目录\Python34\lib\site-packages目录下  

例如我的venv/lib64/python3.4/site-packages/  因为我使用的idea,会自动创建一个目录

以上两种方式是执行函数和引用函数不在同一个目录的情况

 

同一个目录下

如果在同一个目录下  则可以直接使用 import引入而不需要设置path

如 test122.py使用test121.py 则直接在test122.py中使用 import test1.test12 然后就可以使用了

 

 

你可能感兴趣的:(python使用)