Python 空的_uinit__uu.py会干扰直接导入并导致错误吗?
一些代码已经过重构,以使导入直接进行,并且还原的提交等有点混乱。。我得到了一个Python 空的_uinit__uu.py会干扰直接导入并导致错误吗?,python,python-3.x,Python,Python 3.x,一些代码已经过重构,以使导入直接进行,并且还原的提交等有点混乱。。我得到了一个ImportError,对Python导入系统的理解还不够透彻,不知道为什么。我花了很长时间研究分支之间的比较等,但就是找不到它是什么 给定以下目录结构 our_project/ __init__.py directory1/ __init__.py file1.py file2.py file3.py directory2/
ImportError
,对Python导入系统的理解还不够透彻,不知道为什么。我花了很长时间研究分支之间的比较等,但就是找不到它是什么
给定以下目录结构
our_project/
__init__.py
directory1/
__init__.py
file1.py
file2.py
file3.py
directory2/
__init__.py
file3.py
file4.py
file5.py
directory3/
__init__.py
file6.py
file7.py
file8.py
所有\uuuu init\uuuu.py
都是空的,除了我们的\u project/
目录中有一些代码之外
directory3/file7.py顶部的以下内容是否有效,并且不会导致导入错误
:
from out_project.directory1.file1 import my_function
还是你需要写信
从我们的_项目。目录1导入我的_函数
感觉就像这个空的
\uuuu init\uuuuu.py
在某种程度上干扰了事情。您的文件夹布局建议的顶级包是我们的\u项目
。这意味着包含它的文件夹应该位于Python搜索路径中
然后,您可以使用从我们的\u project.directory1.file1 import my\u函数
从任何地方进行绝对导入
在my_project.directory3.file7
模块中,您可以使用相对导入,From..directory1.file1导入my_函数
但是,如果以脚本形式运行file7.py
(例如,在命令行上使用pythonfile7.py
),则相对导入可能不起作用。按文件名运行包中的脚本通常不是一个好主意,因为解释器无法告诉它们应该放在包层次结构中的什么位置。相反,使用python-mour_project.directory4.file7
以其绝对名称运行模块
这里是到的链接,其中有一个很好的教程,其中介绍了所有内容。文件夹布局建议的顶级软件包是
我们的\u项目
。这意味着包含它的文件夹应该位于Python搜索路径中
然后,您可以使用从我们的\u project.directory1.file1 import my\u函数
从任何地方进行绝对导入
在my_project.directory3.file7
模块中,您可以使用相对导入,From..directory1.file1导入my_函数
但是,如果以脚本形式运行file7.py
(例如,在命令行上使用pythonfile7.py
),则相对导入可能不起作用。按文件名运行包中的脚本通常不是一个好主意,因为解释器无法告诉它们应该放在包层次结构中的什么位置。相反,使用python-mour_project.directory4.file7
以其绝对名称运行模块
这里有一个到的链接,其中有一个很好的教程,其中对所有内容进行了解释。init.py文件只是告诉python将该目录视为python包,因此我相信导入方式取决于系统上安装了哪些包(它搜索PYTHONPATH以查找已安装的包/模块). 如果只安装了示例中的our_项目包,则需要像
from our_package.directory1.file1 import my_function
您还可以使用相对导入,无论安装了什么,它都可以工作
from .directory1.file1 import my_function
包的文档如下:
模块搜索路径的信息如下:
init.py文件只是告诉python将该目录视为python包,因此我相信导入方式取决于系统上安装了哪些包(它搜索PYTHONPATH以查找已安装的包/模块)。如果只安装了示例中的our_项目包,则需要像
from our_package.directory1.file1 import my_function
您还可以使用相对导入,无论安装了什么,它都可以工作
from .directory1.file1 import my_function
有关软件包的文档如下所示:
模块搜索路径的信息如下:
在您拥有
file7.py
的目录中没有directory1
。尝试从..directory1.file1导入my_函数中执行,这应该可以正常工作。如果您看到意外行为,您需要提及该行为。也就是说,显示ImportError
的完整回溯。很抱歉,关于点,您是对的。修正了路径你改变了问题<代码>来自..directory1.file1导入我的函数
非常好。真的吗?我想我只是写了完整的路径,而不是一个缩写的路径,就像你在Linux中写`/home/folder1/folder2`而不是。/folder2
,如果你坐在folder1中folder2旁边的另一个文件夹中,你在file7.py
的目录中没有directory1
。尝试从..directory1.file1导入my_函数中执行,这应该可以正常工作。如果您看到意外行为,您需要提及该行为。也就是说,显示ImportError
的完整回溯。很抱歉,关于点,您是对的。修正了路径你改变了问题<代码>来自..directory1.file1导入我的函数
非常好。真的吗?我想我只是写了完整的路径,而不是一个缩写的路径,就像你在Linux中写“/home/folder1/folder2”而不是。/folder2
如果你在folder1中folder2tanks旁边的另一个文件夹中,那么你的回答可以减轻我的主要担忧,这是因为目录3/
中的\uuuu init\uuuuuuuuuy.py
以某种方式迫使您从目录而不是直接从文件导入谢谢,您的回答减轻了我的主要担忧,这就是directory3/
中的\uuuu init\uuuuuuuuupy
以某种方式强制您从目录导入,而不是直接从文件导入