将另一个项目作为模块导入 python

Importing another project as modules in python

假设我有一个结构如下的项目

projectfoo/
|- mymodule/
|--|- __init__.py
|--|- library.py
|- preprocessor.py

__init__.pymymodule 看起来像这样

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'

我这样做正确吗?我在我的设置中使用 python3.4 运行 in ubuntu 14.04。

编辑:我也尝试将 __init__.py 添加到 projectfoo,但我仍然遇到相同的错误

尝试将空 __init__.py 添加到 projectfoo 文件夹。

您必须在 projectfoo/ 文件夹中添加一个 __init__.py 文件(可以为空)以使其成为有效模块。

然后使用相对导入明确指定您正在请求当前模块的子模块 mymodule,如下所示:

from .projectfoo import preprocessor

.表示包含import语句的文件所在的当前模块。它的父模块将表示为 ..,它的 "grandparent" 将是 ...

您收到此错误是因为您没有将 预处理器 的路径添加为库包

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 将 return 绝对路径。但是 sys.path 将 return 路径环境。系统设置中的变量。

希望对您有所帮助。