python导入py文件报错怎么办

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python导入py文件报错怎么办相关的知识,希望对你有一定的参考价值。

其实这两个错误的原因归根结底是一样的:在涉及到相对导入时,package所对应的文件夹必须正确的被python解释器视作package,而不是普通文件夹。否则由于不被视作package,无法利用package之间的嵌套关系实现python中包的相对导入。
文件夹被python解释器视作package需要满足两个条件:
1、文件夹中必须有__init__.py文件,该文件可以为空,但必须存在该文件。
2、不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。
补充:在"from YY import XX"这样的代码中,无论是XX还是YY,只要被python解释器视作package,就会首先调用该package的__init__.py文件。如果都是package,则调用顺序是YY,XX。
另外,练习中“from . import XXX”和“from .. import XXX”中的'.'和'..',可以等同于linux里的shell中'.'和'..'的作用,表示当前工作目录的package和上一级的package。
参考技术A 报错的地方会告诉你哪行错了,自己改正错误

python怎么导入自己写的包

包(packages)其实也是模块,其类型Type也是module。通常引用自定义模块时有两种方法:
1)将两个文件放在同一目录下。
2)在sys.path下添加要引用的py文件的路径。然后import。
这样的做法,对于少数文件是可行的,但如果程序数目很多,层级很复杂时就比较麻烦了。此时用package就能将多个py文件组织起来,类似于第三方包一样的引用。要方便很多。

package的层次结构与程序所在目录的层次结构相同,且必须包含一个__init__.py的文件。__init__.py可以为空,只要它存在就表明此目录被作为一个package处理。

package1/
__init__.py
subPack1/
__init__.py
module_11.py
module_12.py
module_13.py
subPack2/
__init__.py
module_21.py
module_22.py
……

__init__.py可以为空,只要它存在,就表明此目录应被作为一个package处理。当然,__init__.py中也可以设置相应的内容。
好了,现在我们在module_11.py中定义一个函数:

def funA():
print "funcA in module_11"
return

一.引用模块
在顶层目录(也就是package1所在的目录,当然也参考上面的介绍,将package1放在解释器能够搜索到的地方)运行python:

>>>from package1.subPack1.module_11 import funcA
>>>funcA()
funcA in module_11

这样,我们就按照package的层次关系,正确调用了module_11中的函数。

二.使用通配符*,导入某个module中的所有元素
答案就在__init__.py中。我们在subPack1的__init__.py文件中写

__all__ = ['module_13', 'module_12']

然后进入python
>>>from package1.subPack1 import *
>>>module_11.funcA()
Traceback (most recent call last):
File "", line 1, in
ImportError: No module named module_11

也就是说,以*导入时,package内的module是受__init__.py限制的。

三.在package内部互相调用。
1.如果希望调用同一个package中的module,则直接import即可。也就是说,在module_12.py中,可以直接使用
import module_11

2.如果不在同一个package中,例如我们希望在module_21.py中调用module_11.py中的FuncA,则应该这样:
from module_11包名.module_11 import funcA

四.Python如何找到我们定义的module?
在标准包sys中path属性记录了Python的包路径。
import sys
print(sys.path)
通常我们可以将module的包路径放到环境变量PYTHONPATH中,该环境变量会自动添加到sys.path属性.
另一种方便的方法是编程中直接指定我们的module路径到sys.path 中。
常用的话也可以放在python27\lib\site-packages文件夹下。
参考技术A 自己写的模块,要放在需要导入文件同一个目录或者放在lib或者script目录(默认的模块目录)
然后,import 名字 就行。主要不要带后缀,带文件名就行
参考技术B 我也不组队哦

以上是关于python导入py文件报错怎么办的主要内容,如果未能解决你的问题,请参考以下文章

python如何导入自定义模块

python怎么导入同一包的模块

Python导入上一级/下一级/任一级目录下的.py文件问题

Python 第二天学习 模块初识 怎么导入自己写的模块

python怎么导入自己写的包

python调用另一个目录,另一个文件 中的函数报错,怎么解决