2016-04-20 17 views
3

os.environを使用して環境変数を変更した場合、後でインポートするモジュールを変更しますか?os.environのC拡張モジュールへの表示

特に、sqlite3requires一時変数の場所を特定するための環境変数の使用。しかし、私がos.environ['SQLITE_TMPDIR'] = '.'import sqlite3の前に使用すると、それは望みの効果がありません。どうして?

+0

RTFM:os.environ: "このマッピングは、osモジュールが初めてインポートされたときにキャプチャされます。通常、Pythonの起動時にsite.pyを処理します。この時間以降に行われた環境への変更は、os.environただし、os.environを直接変更することによる変更は除きます。プラットフォーム依存の機能を持つos.putenvのドキュメントも参照してください。 –

+0

[リンク先](https://docs.python.org/3/library/os.html#os.environ)を読むと、マニュアルを読むのが簡単です。 –

+1

@PaulCorneliusあなたはドキュメントを誤解しています。環境への変更は 'os.environ'には反映されないという。私は、環境を変えるために 'os.environ'を変更することを反対にしています。ドキュメントは何も言いません。 – max

答えて

2

モジュールは、SQLite Cライブラリの単なるラッパーなので、os.environに加えられた変更は直接表示されません。

しかし、documentationは言う:

プラットフォームはputenv()機能をサポートしている場合、このマッピングは、環境を変更するだけでなく、環境を照会するために使用することができます。 putenv()は、マッピングが変更されたときに自動的に呼び出されます。

os.environを変更した後でSQLiteライブラリを初期化すると、変更内容が表示されます。

SQLiteは異なる環境変数on Unix-y OSeson Windowsを読みます。

関連する問題