您可以通过以下两种方式之一在 python 中创建可导入包。第一种方法是您正在做的事情:您创建一个名为的文件my_package.py
并使用import my_package
. 这通常用于不需要进一步分解的更简单的包。为此,您的 .py 文件必须位于PYTHONPATH
它是一个环境变量,它告诉 python 在哪里查找包。如果未定义,python 将使用一些默认位置来查找包。其中一个默认位置是当前工作目录,这就是您的第一组导入工作的原因。
理论上,您应该能够从同一位置 ( ) 运行第二段代码python ../top_class.py
并使用相同的导入样式,但我假设您正在更改目录以运行该文件。这意味着您的文件不再位于当前工作目录中,并且不再被 python 找到。
使用现有样式让代码工作的一种方法是使用PYTHONPATH
methodX.py 文件的位置进行定义。您通常会像这样添加到 python 搜索路径:
PYTHONPATH=$PYTHONPATH:./methods_folder python top_class.py
methods_folder
当您尝试导入某些内容时,这会告诉 python 在标准位置之外查找。玩PYTHONPATH
一段时间后会有点烦人,所以我实际上更喜欢下一种方法。
创建包的第二种方法是创建一个包含文件的__init__.py
文件夹。这告诉 python 你希望它将该目录视为一个包。对于可能受益于跨多个文件的组织的更复杂的代码片段,这是首选样式。对于您的示例,您可以按以下方式组织代码:
base_folder
methods_folder
__init__.py
method_1.py
method_2.py
.
.
.
method_n.py
class_methods.py
top_class.py
然后您的导入top_class.py
将如下所示:
from methods_folder.method1 import method1
from methods_folder.method2 import method2
from methods_folder.method3 import method3
methods_folder
这具有创建带有 modules method1
、method2
等的顶级包的效果。因为methods_folder
与您正在运行的目录位于同一目录中top_class.py
,python 使用默认值将其作为包选择PYTHONPATH
并允许您从其中导入。