(locale/
のように)、私はsettings.py
でこれを使用する私のアプリのサブディレクトリにアクセスするためのいくつかのパスを設定するために:その後、テストでも実行スクリプトに対するパスを正しく設定する方法はありますか?
__process_name = os.path.basename(sys.argv[0])
__abspath = os.path.abspath(sys.argv[0])
__l1 = len(__process_name)
__l2 = len(__abspath)
rootdir = __abspath[:__l2-__l1]
そして、data/
にアクセスするには、たとえば:
datadir = rootdir + "data/"
問題テストを実行するときにsettings.py
を実行すると(python3 -m py.test
など)、sys.argv[0]
はもうmyappと一致せず、テストスクリプトはdata/
にアクセスできません。
私は、例えば、これに対処する方法を疑問に思う:
- 私のアプリとテストスイートの両方から同じROOTDIRを取得する方法はありますか?
- または、自分のアプリケーションにのみ
settings.py
を保存し、テストスイートに正しい(ハードコードされた)rootdirを指定する必要がありますか? - 設定ファイルに
installdir
を定義します。これはインストール時にセットアップされ、上記のスニペットではなくmyappとそのテストスイートの両方で使用されますか? sys.argv[0]
を'myappname'
で置き換えることも考えましたが、同じ名前の別のディレクトリが存在するため、正しい名前が付いているかどうかはわかりません。 (さらに、別の場所にインストールされたバージョンと1つのデベロッパーバージョンがある場合、それらを区別する方法は?)
これを処理するにはどうすればよいでしょうか?
'os.path.dirname(os.path.abspath(__ file __))'を使ってみましたか? –
@ TheCompilerいいえ、それを試していなかった。私は実際にディレクトリのレベルの違いを処理するために少しそれをハックする必要がありますが、それは間違いなくケースを解決している!これは賢いです!これを答えとして追加することができます。 – zezollo