[解決済み] モジュール __file__ 属性は絶対的か相対的か?
質問
理解するのに苦労しています
__file__
. 私が理解したところでは
__file__
はモジュールがロードされた絶対パスを返します。
私はこれを生成するのに苦労しています。私は
abc.py
で、1つのステートメント
print __file__
から実行されます。
/d/projects/
python abc.py
を返す
abc.py
からの実行
/d/
を返す
projects/abc.py
. 何か理由があるのでしょうか?
どのように解決するのですか?
からの ドキュメント :
__file__
は、モジュールがファイルからロードされた場合、そのファイルのパス名です。その__file__
属性はインタープリタに静的にリンクされた C モジュールには存在しません。共有ライブラリから動的にロードされた拡張モジュールの場合、共有ライブラリファイルのパス名となります。
から メーリングリストスレッド に対するコメントで @kindall がリンクしたものです。
この特定の例を再現しようとしたわけではありませんが、その理由は インポートするたびに getpwd() を呼び出す必要はありません。 カレントディレクトリをキャッシュするためのプロセス内変数を持ちたくないからです。 ディレクトリをキャッシュするためのプロセス内変数を持ちたくないからです。(getpwd()は比較的遅く、時には完全に失敗することがあります。 は比較的遅く、時には失敗することがあり、それをキャッシュしようとすると、間違っている一定のリスクがあります)。
私たちが代わりに行うのは、site.pyのコードで、sys.pathの要素を走査し、それらを絶対パスに変換します。 sys.pathの要素を走査し、それらを絶対パスに変換するコードです。しかし、このコードは がsys.pathの前に挿入される前に実行されます。 の値は''です。
この続きは、次のように考えてください。
sys.path
を含めない
''
.
の部分から外れるわけです。
sys.path
の部分の外側にいる場合は
絶対パス
. の部分の中にいる場合は
sys.path
の中にいる場合、モジュールが含まれる部分には
相対パス
.
もし、カレントディレクトリにあるモジュールをロードし、カレントディレクトリが
が
で
sys.path
にない場合は、絶対パスを取得します。
もし、カレントディレクトリにあるモジュールをロードし、カレントディレクトリが
が
で
sys.path
であれば、相対パスで表示されます。
関連
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み] フルパスでモジュールをインポートするには?
-
[解決済み] 億の相対的輸入
-
[解決済み] 2次元アレイにおけるピーク検出
-
[解決済み] 相対パスからモジュールをインポートする
-
[解決済み] Python 3.3のyield from構文は、実際にはどのような用途に使われるのでしょうか。
-
[解決済み】Python 3での相対インポート
-
[解決済み】Pythonの "global "キーワードの使用について
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 現在実行中のファイルのパスと名前を取得するにはどうしたらいいですか?
-
[解決済み] Pythonのキャッシュライブラリはありますか?
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] if 節の終了方法
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?