0

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 に追加しようとしましたが、ダイスはありません。

他の誰かがこの問題を経験したことがありますか、またはここで何が起こっているかについての洞察はありますか?

4

1 に答える 1

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)

testing.common.database

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のコメントに従って、問題の正しい原因を示すように編集されました。

于 2016-06-24T00:07:23.840 に答える