我为我目前正在处理的其中一个项目创建了一个cv::Mat
包。顶部包名为std::vector<cv::Rect>
,内部包含另一个名为cv::Size
的名称和测试名称。我通过Python
安装了模块:生成了integration
dist,并已安装。此外,还有一个名为testcases
的顶级脚本已复制到命令行。
目录结构如下所示:
pip
因此,从命令行开始,在pip wheels
之后,我运行:
integration
一切顺利,直到它开始导入包:
project/
__init__.py
integration/
README.md
__init__.py
integration # script
testcases/
__init__.py
foo_test.py
bar_test.py
当然我没有尝试加载pip install
:我通过了integration --wait-time 1
。在终端做同样的事情我成功了:
*** Update *****
# os.getcwd() : /home/ubuntu/project
*****
2016-02-17 17:03:25 - project - INFO - Module: integration.testcases.bar_test
2016-02-17 17:03:25 - project - INFO - class_str: BarTest
2016-02-17 17:03:25 - project - INFO - class_data: [u'bar_test', u'py']
2016-02-17 17:03:25 - project - ERROR - Failed to instantiate class integration.testcases.bar_test
Traceback (most recent call last):
File "/usr/local/bin/integration", line 131, in load_class
module = importlib.import_module(module_path)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named testcases.bar_test
2016-02-17 17:03:25 - project - ERROR - No module named testcases.bar_test
Traceback (most recent call last):
File "/usr/local/bin/integration", line 131, in load_class
module = importlib.import_module(module_path)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
这是导入这些类的方法的源代码:
testcases.bar_test
integration.testcases.bar_test
只会将ubuntu@ip-10-3-6-9:~$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import importlib
>>> module = importlib.import_module('integration.testcases.bar_test')
2016-02-17 17:10:00 - easyprocess - DEBUG - version=0.2.2
2016-02-17 17:10:00 - pyvirtualdisplay - DEBUG - version=0.1.5
替换为try:
# filename -> bar_test.py
# class_str -> BarTest
class_data = filename.split(".")
current_path = "{0}.{1}".format("integration.testcases", class_data[0])
module_path = self.format_path(current_path)
self.log.info("Module: %s" % module_path)
module = importlib.import_module(module_path)
return getattr(module, class_str)
except Exception, e:
self.log.exception("Failed to instantiate class %s" % module_path)
self.log.exception(e)
,而不是其他任何内容,所以
format_path(path)
我想知道为什么'/'
使用'.'
代替foo/bar/bat -> foo.bar.bat
。有线索吗?
答案 0 :(得分:0)
您从/home/ubuntu
运行此操作的事实很重要。 Python iterpreter搜索模块的方式描述为here
在您的情况下调查它们在哪里寻找:
import sys
print sys.path
如果/home/ubuntu/project1
不存在,则import integration.whatever
将失败。
然后你有3个选择:
- 将您的输入脚本放在/home/ubuntu/project1
文件夹中
- 将/home/ubuntu/project1
添加到PYTHONPATH
环境变量
- 在您的输入脚本中将/home/ubuntu/project1
添加到sys.path