我使用的是python 2.7和ubuntu 16.04。
我在python上有一个简单的REST服务器: module1 中的文件 server_run.py ,它从 module2 导入一些脚本。 现在我正在编写集成测试,它正在向我的服务器发送POST请求并验证我的服务器已采取必要的操作。显然,服务器应该启动并运行但我不想手动执行,我想从我的测试启动我的服务器(server_run.py也有主要方法): server_run_test.py module3 中的文件。
所以,任务听起来很简单:我需要从另一个开始一个python脚本,但我花了差不多一整天。我在这里找到了几个解决方案,包括:
script_path = "[PATH_TO_MODULE1]/server_run.py"
subprocess.Popen(['python', script_path], cwd=os.path.dirname(script_path))
但我的服务器没有出现,抛出错误:
Traceback (most recent call last):
File "[PATH_TO_MODULE1]/server_run.py", line 1, in <module>
from configuration.constants import *
File "[PATH_TO_MODULE2]/constants.py", line 1, in <module>
from config import *
ModuleNotFoundError: No module named 'config'
所以,看起来当我尝试在子进程中启动我的服务器时,它不再能看到导入了。 你们有什么想法我能解决它吗?
答案 0 :(得分:1)
最终,找到了解决方案,采取了两个步骤: 1.在每个模块中,我有一个空 __ init __。py 文件,它被更改为:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
__version__ = '${version}'
2。而不是使用以下语法:
from configuration.constants import *
from configuration.config import *
配置和常量导入为:
from configuration import constants,config
然后我们在需要获得一些常量时使用它们。
感谢大家对此进行调查。
答案 1 :(得分:0)
不是使用os
模块运行它,而是尝试使用import
函数。您需要保存在相同的字典或子文件夹或python安装中,但这似乎是这样做的方法。 Like this post suggests