3

1 つの Python ファイル (backend.py) にボトル アプリケーションがあります。このファイルには、次の定義が含まれています。

variable = {
    'field': [f for f in csv.DictReader(open('../data/fields.csv', 'rb'), delimiter=';')]
}

def run_fcgi():
    from bottle import FlupFCGIServer
    run(port=8080, server=FlupFCGIServer)

if __name__ == "__main__":
    run(host='0.0.0.0', port=8087, server='waitress')

このアプリを次のように実行すると:

python backend.py

アプリケーションが正常に開始されました。

このアプリケーションをスーパーバイザーで fcgi アプリケーション (fcgi.py) として実行すると、次のようになります。

#!my_path_to_python

if __name__ == '__main__':
    import backend
    backend.run_fcgi()

エラーがあります:

Traceback (most recent call last):
  File "path_to_my_project/fcgi.py", line 9, in <module>
    import backend
  File "path_to_my_project/backend.py", line 49, in <module>
    'msk': [i for i in csv.DictReader(open('../data/fields.csv', 'rb'), delimiter=';')],
IOError: [Errno 2] No such file or directory: '../data/fields.csv'

何か案は?

4

1 に答える 1

4

作業ディレクトリに依存しないほうがよいと思います。このパスを使用するファイルへの相対パスを使用します。つまり、その場でパスを計算できます。

import os
csv_path = '../data/fields.csv'
csv_path = os.path.join(os.path.dirname(__file__), csv_path)

この場合、別の環境でスクリプトを実行できます。作業ディレクトリに依存しないことを確認するためにフルパスが使用されます。

于 2013-09-21T18:10:30.980 に答える