[解決済み] import os.path` と `import os` のどちらを使うべきですか?
質問
によると
公式ドキュメント
,
os.path
はモジュールです。したがって、それをインポートする好ましい方法は何でしょうか?
# Should I always import it explicitly?
import os.path
または...
# Is importing os enough?
import os
インポートについてお答えください。
os
が動作するようになりました。私も今現在(Python 2.6時点)、動作していますよ。私が知りたいのは、この問題についての公式な推奨事項です。だから、あなたがこの質問に答えるなら、お願いします
参考文献を掲載する
.
解決方法は?
os.path
はおかしな動作をします。それは次のように見えます。
os
はパッケージで、サブモジュールの
path
が、実際には
os
は、通常のモジュールで
sys.modules
を注入するために
os.path
. 以下はその様子です。
-
Pythonが起動するとき、モジュールの束を
sys.modules
. しかし、何らかの方法でモジュールをインポートすると、既に作成されているモジュールにアクセスすることができます。-
sys.modules
は、モジュールがキャッシュされるディクショナリです。モジュールをインポートするとき、すでにどこかでインポートされていればsys.modules
.
-
-
os
は、Pythonの起動時にロードされるモジュールの一つです。これはそのpath
属性は、os 固有のパスモジュールになります。 -
を注入します。
sys.modules['os.path'] = path
ができるように、"import os.path
サブモジュールであるかのように。
を考えることが多いのですが
os.path
として
使いたいモジュール
よりも
にあるもの。
os
モジュール
ということで、たとえ
本当に
というパッケージのサブモジュールです。
os
というようにインポートしています。
私はいつも
import os.path
. これは
os.path
は文書化されています。
ちなみに、このような構造は、モジュールやパッケージやコード構成について、Pythonプログラマの初期の混乱につながると私は思います。これには実に2つの理由があります。
-
を考えてみると
os
をパッケージとして知っていてimport os
というサブモジュールにアクセスすることができます。os.path
ができないので、後でびっくりするかもしれません。import twisted
にアクセスし、自動的にtwisted.spread
をインポートすることなく使用できます。 -
というのは紛らわしい。
os.name
は通常のもの、文字列でありos.path
はモジュールです。私はいつもパッケージの構造を空の__init__.py
ファイルは、同じレベルで常に1つのタイプのもの、つまりモジュールやパッケージ、その他のものを持つようにします。いくつかの大きなPythonプロジェクトはこのアプローチを取っていて、より構造化されたコードを作る傾向があります。
関連
-
[解決済み] フルパスでモジュールをインポートするには?
-
[解決済み] 億の相対的輸入
-
[解決済み] Pythonのdictsで'has_key()'と'in'のどちらを使うべきですか?
-
[解決済み] 他のPythonファイルをインポートするには?
-
[解決済み] 同じディレクトリやサブディレクトリ内のクラスをインポートする方法は?
-
[解決済み] 相対パスからモジュールをインポートする
-
[解決済み] 関数は return 文を1つだけ持つべきですか?
-
[解決済み] モジュール名を文字列で指定してインポートするには?
-
[解決済み] サブディレクトリからファイルをインポートする?
-
[解決済み] import module」または「from module import」を使用しますか?
最新
-
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サンプルコード
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み] Pythonでファイル名から拡張子を抽出する