我正在运行Python 2.5。
这是我的文件夹树。
ptdraft/
nib.py
simulations/
life/
life.py
(我在每个文件夹中都有__init__.py
,为了方便阅读,这里省略了)
我如何从life
模块中导入nib
模块?我希望在不修改sys.path的情况下可以做到这一点。
注意:正在运行的主要模块是在ptdraft
文件夹中。
你可以使用相对导入(python >=2.5)。
from ... import nib
(What's New in Python 2.5) PEP 328: Absolute and Relative Imports 。
编辑:添加了另一个点 '.'以上升两个包
如果在PYTHONPATH中加入你的模块文件夹不起作用,你可以在你的程序中修改sys.path列表,在那里Python解释器会搜索要导入的模块,python文档说。
当一个名为spam的模块被导入时,解释器首先搜索具有该名称的内置模块。如果没有找到,它就在变量 sys.path 给出的目录列表中搜索一个名为 *spam.py 的文件。
- 包含输入脚本的目录(或当前目录)。
- PYTHONPATH(一个目录名称的列表,其语法与shell变量PATH相同)。
- 与安装有关的默认值。
初始化后,Python程序可以修改sys.path。包含正在运行的脚本的目录被放在搜索路径的开头,在标准库路径的前面。这意味着该目录下的脚本将被加载,而不是库目录下的同名模块。这是一个错误,除非是有意进行替换。
知道了这一点,你就可以在你的程序中做以下工作。
import sys
# Add the ptdraft folder path to the sys.path list
sys.path.append('/path/to/ptdraft/')
# Now you can import your module
from ptdraft import nib
# Or just
import ptdraft