我有以下想要构建的python包的目录结构(python3.4(
```
/project/src/mypackage/__init__.py
/project/src/mypackage/module.py
/project/src/mypackage/setup_utils.py
/project/setup.py
```
我setup_utils.py
中有一些有用的代码,我想在setup.py
顶部导入。如果我不添加sys.path.append('src')
,我会得到ImportError
```
$ cat setup.py
from setuptools import setup
from mypackage import setup_utils
cmdclass = setup_utils.cmdcass
...
$ python setup.py install
...
ImportError: No module named 'mypackage'
...
```
现在,如果我确实添加了sys.path.append('src')
,我没有得到覆盖Coverage.py warning: Module mypackage was previously imported, but not measured.
```
$ cat setup.py
import sys
sys.path.append('src')
from setuptools import setup
from mypackage import setup_utils
cmdclass = setup_utils.cmdcass
...
$ python setup.py install
$ coverage ...
Coverage.py warning: Module mypackage was previously imported, but not measured.
```
那么,解决此问题的正确方法是什么?
您的问题已在此处确定: 从其他文件夹导入文件
基本上,python只在当前工作目录中查找模块。由于/src
不是模块,因此不会继续进一步查找。
一旦可能的解决方案是将/src
目录转换为模块,然后setup_utils
可以成为其中的子模块。为了将src
转换为模块,只需添加一个空的__init__.py
文件。
然后,您可以将其导入脚本中,from src.mypackage import setup_utils