【发布时间】:2016-04-09 21:15:21
【问题描述】:
给定目录结构:
program/
setup.py
ilm/
__init__.py
app/
__init__.py
bin/
script.py
注意:setup.py 不是典型的 setup.py,而是专门为 py2app 定制的设置。
program/ilm/app/__init__.py 是非空的:它包含一个main() 函数,它在同一个文件中实例化一个类。我的问题:在program/ilm/bin/script.py 中,如果我想在program/ilm/app/__init__.py 中导入并执行main() 函数,有哪些有效方法可以实现?我问的原因是 script.py 是这样做的:
import ilm.app as app
if __name__ == '__main__':
app.main()
根据我(诚然有限)对打包和导入的理解,这不应该工作,因为我们没有明确告诉 script.py 使用 .. 在哪里寻找 project/ilm/app/__init__.py。事实上,我得到:
MacBook-Pro-de-Pyderman:program Pyderman$ python ./bin/script.py
Traceback (most recent call last):
File "./bin/script.py", line 5, in <module>
import ilm.app as app
ImportError: No module named ilm.app
相比之下,当 Python 解释器在 /project 中启动时,import ilm.app as app 工作正常。
这显然是功能齐全的生产代码,我不应该为了运行而进行更改。
- 在给定目录结构的情况下,
import语句是否有效,如果有效,我缺少什么? - 如果不是,推荐的导入工作的方法是什么?在
import语句上方使用sys.path.append()添加路径?还是在import语句中使用..表示法显式指向程序以获取project/ilm/app/__init__.py?我正在尝试导入的__init__.py这一事实是否重要?
【问题讨论】:
-
Python 版本:2.7.10
-
你真的安装
iml了吗?它的目录在你的路径上吗?哪里有setup.py? -
iml 是包中的一个目录(见上面的文件夹结构)
-
这并没有解决我的任何问题...阅读一下例如docs.python.org/2/tutorial/modules.html
-
iml 不是第三方模块。它是(本项目的)已开发代码库的一部分。
标签: python python-2.7 import packages relative-path