在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 <module>
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 然后就可以使用了