2016-11-28 57 views
0

我正在用2个源python文件构建一个相对简单的python模块。我应该如何导入模块中的另一个python文件

的结构是如下所示:

├── MyModule 
│   ├── MyModule 
│   │   ├── __init__.py 
│   │   ├── file1.py 
│   │   ├── file2.py 
│   ├── requirements.txt 
│   ├── setup.py 

内部的__init__.py我有

from .file1 import * 

,使得进口时,我可以简单地键入mymodule.myFunction()

和file1.py的内部我有

import file2 

然后我使用pip install -e .安装模块。

然而,当我尝试导入它,我得到以下错误:

----> 1 import file2 
     2 import matplotlib.pyplot as plt 
     3 import numpy as np 
     4 import scipy.signal 

ImportError: No module named 'file2' 

什么是接受的方式,我应该去这样做呢?

+0

你应该'导入​​MyModule'并确保路径MyModule里面的PYTHONPATH或sys.path – Skycc

回答

0

看来问题是,当文件被导入到init .py文件中时,它会看到它正在导入的当前python环境,因此看不到file2.py。但是,如果我不是里面的init类型的

from .file2 import * 
from .file1 import * 

和文件1型内

import MyModule 

然后我可以使用内部文件2定义的内部文件1的功能,像这样

MyModule.FunctionFromfile2(...) 

做的另一种方式这将是如在此讨论的https://docs.python.org/2/distutils/examples.html初始化子包。

我最终使用它作为一个分包因为这是对我的具体情况比较明智的,现在的目录结构如下所示:

├── MyModule 
│ ├── MyModule 
│ │ ├── __init__.py 
│ │ ├── file1.py 
│ │ ├──MySubModule 
│ │ │ ├── __init__.py 
│ │  ├── file2.py 
│ ├── requirements.txt 
│ ├── setup.py 

里面MyModule中的__init__.py我导入文件1为from .file1 import *和内在MySubModule里面的__init__.py我导入file2为from .file2 import *

里面的file1的我然后使用MySubModule像这样:

import MyModule.MySubModule 

MyModule.MySubModule.FunctionFromfile2(...) 

这具有当以模块的进口分离的file1和file2的功能/对象的名称空间的好处。用户看到MyModule.functionsFromfile1MyModule.MySubModule.functionsFromfile2