問題タブ [relative-import]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
64 参照

python - 外部ディレクトリからのパッケージの実行 - インポートの問題

私はパッケージを持っています:

__main__.py

ファイル__init__.pyが空です。

たとえば、指定されたパスから mypkg を実行する必要があります。

この方法で mypkg を実行すると、次のエラーが表示されます。

from mypkg import mod1これは、変更すると解決できますfrom . import mod1が、PEP8 は相対インポートよりも絶対インポートを推奨しています。

私が見つけた別の解決策は、追加することです:

__init__.pyファイルする

その後、すべてがうまく機能します。

質問は次のとおりです。より良い解決策は何ですか? 相対インポートを使用するか、sys.path を操作してパッケージを適切に実行するか、この問題の別の解決策が存在する可能性がありますか?

0 投票する
0 に答える
105 参照

python - ImportError ではなく、「トップレベル パッケージを超えた相対インポートの試み」が ValueError になるのはなぜですか?

最上位のパッケージを超えて相対インポートを行うと、例外が発生します — 驚くことではありません。しかし、なぜそれはであり、ValueErrorではないのImportErrorですか?

ImportErrorこの例外はパッケージのインポートに関連しており、通常はImportError(またはそのサブクラス) を与えるため、私は を期待していましたModuleNotFoundError。ここでの根拠は何ですか?

0 投票する
1 に答える
81 参照

python - Python 2.7 パッケージでの複数の相対インポート

相対インポートに関するSOの質問がたくさんあることを理解しています。そこに解決策を試した範囲を記録しますが、それでも問題を解決できません。

次のディレクトリ構造があります。設計上は私のものではありませんが、必要に応じて変更するためのゲームです(フォークされたレポ)。

このレポでモデルを実行するには、使用します

python main_Exp.py input_file.csv

内部main_Exp.py:

内部ResNet/ThreeDMM_shape.py:

わかりました。明らかに、このハードコードされた絶対パスを変更する必要があります。これらのファイルをたまたまインストールした自分の特定のパスを使用せずに、正しい方法で実行したいと思います。


だから私は試します

(1)フォルダー__init__.pyにファイルを追加しました ( で表示) (2) ファイルをモジュールとして実行してみました: (3)最上位フォルダー ( ) にも追加しようとしましたが、ナンセンスだと思います。(4)に追加されたパスを使用して最初のインポートが行われたことを考えると、インポートを次のように変更してみました。ResNet(*)python -m main_Exp input_file.csv__init__.pyexpkaffesys.pathfrom .tensorflow.network_shape import Network_Shape

すべての手順の後、同じエラーが発生します。

したがって、相対インポートに関するルールと、ファイルを適切に参照する方法を理解していません。これを行う方法と、そのようなインポートについて一般的に考える方法を理解するのに役立つポインターを本当に感謝します!

0 投票する
0 に答える
58 参照

python - 現在のスクリプトに関連するモジュールをインポートしています(トップレベルを超えて)

aのいくつかのバージョンを含むプロジェクトがあるmain#.pyので、それらを というディレクトリに整理しますrun。私は通常、 を呼び出しaてからプロジェクトを実行します。最上位パッケージを超えたインポートが含まれるため、 in で指定する必要があります。./apython run/main1.pymain1.pysys.path.insert(0, "./")main1.py

からbインポートするプロジェクトを作成しました。から、具体的にインポートするにはどうすればよいですか?main1.pyab\main.pymain1.pya/utils.py

要件:

  1. プロジェクトaは私がずっと前に取り組んでいたプロジェクトなので、そのヘッダーだけに限定的な変更を加えたいと思います。今のようpython run/main1.pyに働きたい。

  2. プロジェクトを異なるコンピューター間で移動する可能性があるため、それ自体main1.pyに対してインポートする必要がutils.pyあります。(つまり、絶対パスでインポートしない)

  3. ソリューションがスケーラブルであることを望みます。bのような構造の他のいくつかのプロジェクトからモジュールをインポートする必要がありますa。システムの PATH 変数を拡張すると、問題が発生する可能性があると思います。もっときちんとした解決策はありますか?

私のプロジェクトのファイルは次のとおりです。

  • a
    • 走る
      • main1.py
    • ユーティリティ.py
  • b
    • main.py
    • ユーティリティ.py

a/run/main1.py:

a/utils.py:

b/main.py:

b/utils.py:

これが現在の結果です。最初の行に「hello from a」を出力したいと思います。