使用包会出现找不到模块的错误
working with packages gets a module not found error
我想重新构建我以前在一个目录中的 Python 应用程序,它运行良好。
现在我想移动包中的一些 Python 模块,但我在导入模块时遇到问题。
说,这是我的项目文件夹:
project
|
|- package
| |- __init__.py
| |- module1.py
| |- module2.py
|- main.py
与 main.py:
from package.module1 import func1
func1()
module1.py:
from module2 import func2
def func1():
func2()
module2.py:
def func2():
pass
文件包/init.py为空
当我运行main.py时,我得到:
Traceback (most recent call last):
File "c:\Users\wielando\Documents\Temp\pytest\main.py", line 1, in <module>
from packages.module1 import func1
File "c:\Users\wielando\Documents\Temp\pytest\package\module1.py", line 1, in <module>
from module2 import func2
ModuleNotFoundError: No module named 'func2'
为什么从 module1 中找不到 module2,尽管它在同一个文件夹中?
你可以看一下here绝对导入和相对导入的解释。
无论如何,您可以使用 relative import:
module1.py
from .module2 import func2
(使用module2前面的点告诉程序在同一文件夹中查找module2)。
或者,您可以使用 absolute 导入,即提供您从项目根目录导入的文件的完整路径文件夹。
在您的情况下,它将是:
module1.py
from my_packgs.module2 import func2
如果您使用 IDE,例如 PyCharm,您会注意到在绝对导入的情况下,指令被标记为错误。
这是因为 IDE 不知道您在 module1.py 中提供的绝对路径正在使用 main.py 所在的文件夹作为起点(因为您正在执行 main.py,main.py所在路径为项目根文件夹)。无论如何,当你 运行 main.py 时,一切正常。
我想重新构建我以前在一个目录中的 Python 应用程序,它运行良好。 现在我想移动包中的一些 Python 模块,但我在导入模块时遇到问题。
说,这是我的项目文件夹:
project
|
|- package
| |- __init__.py
| |- module1.py
| |- module2.py
|- main.py
与 main.py:
from package.module1 import func1
func1()
module1.py:
from module2 import func2
def func1():
func2()
module2.py:
def func2():
pass
文件包/init.py为空
当我运行main.py时,我得到:
Traceback (most recent call last):
File "c:\Users\wielando\Documents\Temp\pytest\main.py", line 1, in <module>
from packages.module1 import func1
File "c:\Users\wielando\Documents\Temp\pytest\package\module1.py", line 1, in <module>
from module2 import func2
ModuleNotFoundError: No module named 'func2'
为什么从 module1 中找不到 module2,尽管它在同一个文件夹中?
你可以看一下here绝对导入和相对导入的解释。
无论如何,您可以使用 relative import:
module1.py
from .module2 import func2
(使用module2前面的点告诉程序在同一文件夹中查找module2)。
或者,您可以使用 absolute 导入,即提供您从项目根目录导入的文件的完整路径文件夹。
在您的情况下,它将是:
module1.py
from my_packgs.module2 import func2
如果您使用 IDE,例如 PyCharm,您会注意到在绝对导入的情况下,指令被标记为错误。
这是因为 IDE 不知道您在 module1.py 中提供的绝对路径正在使用 main.py 所在的文件夹作为起点(因为您正在执行 main.py,main.py所在路径为项目根文件夹)。无论如何,当你 运行 main.py 时,一切正常。