【发布时间】:2012-01-05 16:50:55
【问题描述】:
我已经用 python 写了几个月了,但我从来没有找到关于导入如何工作的完整解释。我下载了这个文件夹,其中包含带有 python 文件的子文件夹。我正在尝试使用其中一个文件,但我正在失去理智。您如何正确导入包含所有文件的文件夹?
任何帮助将不胜感激。
【问题讨论】:
我已经用 python 写了几个月了,但我从来没有找到关于导入如何工作的完整解释。我下载了这个文件夹,其中包含带有 python 文件的子文件夹。我正在尝试使用其中一个文件,但我正在失去理智。您如何正确导入包含所有文件的文件夹?
任何帮助将不胜感激。
【问题讨论】:
如python documentation on modules中所写:
如果你的文件夹听起来像这样:
sound/ Top-level package
__init__.py Initialize the sound package
effects/ Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
导入效果文件夹的所有文件:
from sound.effects import *
请注意,为了能够导入模块,它们必须包含一个__init__.py 文件。
【讨论】:
首先,检查子目录中是否有一个名为__init__.py 的文件。 Python 不会识别不包含这些文件的目录。
然后,您将不得不手动更改PYTHONPATH,您可以在sys.path 中找到它。你可以找到一个很好的例子here。
编辑:我不能 100% 确定这就是您所要求的。如果要导入目录中的所有python文件,则必须逐个导入它们。例如,给定一个这样的目录:
parent/
__init__.py
runner.py
example.py
language.py
你必须输入
from parent import runner, example, language
或
from parent import * # this will also import __init__
【讨论】:
您必须在目录中创建一个__init__.py 文件才能使其成为一个包。在此文件中,您可以从基础文件中导入所有符号。
请参阅http://docs.python.org/tutorial/modules.html(尤其是第 6.4 部分包)了解更多说明。
【讨论】:
父文件夹必须位于 PYTHONPATH 中,或者位于路径中某个位置(通常位于 site-packages)中扩展名为 .pth 的文件中指示的文件夹路径。
那么你的包和你必须从中导入的所有文件夹都需要有一个名为__init__的文件。此文件可用于程序初始化,但作为起点,它可以是一个空文件。
例如我的程序文件夹,位于C:\python26 具有以下结构:
programas\
.....package1\
.........__init__.py
.........module1.py
.........subpackage1\
.............__init__.py
.............module2.py
.....package2\
.........__init__.py
.........module3
.....__init__.py
.....lonelyscript1.py
.....lonelyscript2.py
文件site-packages\site.pth 包含:
C:\Python26\programas
【讨论】: