python在setup.py中导入src / package.module

时间:2018-01-12 04:09:36

标签: python code-coverage setup.py

我有一个我想要构建的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.

```

那么,解决这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分:-2)

我相信您的问题在此处得到确认:Importing files from different folder

基本上,python只查找当前工作目录中的模块。由于/src不是模块,因此不会继续查看。

一旦可能的解决方案是将/src目录转换为模块,然后setup_utils可以是其中的子模块。要将src转换为模块,只需添加一个空的__init__.py文件。

然后您可以在脚本中将其from src.mypackage import setup_utils

导入