我正在尝试使用testing.postgresql包测试一些脚本,并在实例化testing.postgresql.Postgresql()或testing.postgresql.PostgresqlFactory()时遇到此错误:
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\testing\common\database.py", line 83, in __init__
self.initialize()
File "C:\Python27\lib\site-packages\testing\postgresql.py", line 50, in initialize
self.initdb = find_program('initdb', ['bin'])
File "C:\Python27\lib\site-packages\testing\postgresql.py", line 134, in find_program
path = get_path_of(name)
File "C:\Python27\lib\site-packages\testing\common\database.py", line 288, in get_path_of
stderr=subprocess.PIPE).communicate()[0]
File "C:\Python27\lib\subprocess.py", line 710, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 960, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
通过跟踪跟踪和在线搜索,我发现,subprocess.py无法找到initdb.exe。究竟为什么通过subprocess.py传递给扩展模块_subprocess.c变得更加模糊。
我已经尝试将包含initdb的目录添加到系统PATH,没有骰子。
是否有其他人遇到过这个问题,或者对此处发生的事情有任何见解?
答案 0 :(得分:1)
查看来源,它似乎与Windows兼容。该软件包需要一个UNIX风格的环境。
testing.postgresql/src/testing/postgresql.py
def find_program(name, subdirs):
path = get_path_of(name)
if path:
return path
for base_dir in SEARCH_PATHS:
for subdir in subdirs:
path = os.path.join(base_dir, subdir, name)
if os.path.exists(path):
return path
raise RuntimeError("command not found: %s" % name)
def get_path_of(name):
path = subprocess.Popen(['/usr/bin/which', name],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE).communicate()[0]
if path:
return path.rstrip().decode('utf-8')
else:
return None
已编辑,以显示以下@ eryksun评论的正确问题来源。