将另一个项目作为模块导入 python
Importing another project as modules in python
假设我有一个结构如下的项目
projectfoo/
|- mymodule/
|--|- __init__.py
|--|- library.py
|- preprocessor.py
在 __init__.py
中 mymodule
看起来像这样
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 路径环境。系统设置中的变量。
希望对您有所帮助。
假设我有一个结构如下的项目
projectfoo/
|- mymodule/
|--|- __init__.py
|--|- library.py
|- preprocessor.py
在 __init__.py
中 mymodule
看起来像这样
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 路径环境。系统设置中的变量。
希望对您有所帮助。