假设我有一个结构如下的项目
projectfoo/
|- mymodule/
|--|- __init__.py
|--|- library.py
|- preprocessor.py
mymodule 中的 __init__.py 看起来像这样
from . import library #library itself has other functions
def some_function():
blar blar blar...
preprocessor.py 如下所示
import mymodule
def main():
something()
def something():
mymodule.some_function() # calls the function defined in __init__.py
if __name__ == '__main__':
main()
然后我启动了 projectbar,它使用了很多来自 projectfoo 的通用代码。因此,我希望将 projectfoo 导入项目栏,而不是在项目之间复制和粘贴代码,如下所示。
projectbar/
|- projectfoo/
|--|- mymodule/
|--|--|- __init__.py
|--|--|- library.py
|--|- preprocessor.py
|- index.py
所以我尝试在我的 index.py 中导入 preprocessor,如下所示
from projectfoo import preprocessor
但是我收到一条错误消息,提示 preprocessor.py 现在无法导入 mymodule。
ImportError: No module named 'mymodule'
我这样做正确吗?我在我的设置中使用在 ubuntu 14.04 中运行的 python3.4。
编辑:我也尝试将 __init__.py 添加到 projectfoo,但我仍然遇到同样的错误
请您参考如下方法:
您收到此错误是因为您没有将预处理器 的路径添加为库包
from sys import path as pylib #im naming it as pylib so that we won't get confused between os.path and sys.path
import os
pylib += [os.path.abspath(r'/projectfoo')]
from projectfoo import preprocessor
仅供引用:os.path 将返回绝对路径。但 sys.path 将返回路径环境。系统设置中的变量。
希望对您有所帮助。
