1

cmdline / consoleからpythonを実行している場合にのみ、pythonパッケージのインポートに問題があります。ただし、pydevを使用すると、すべてが正常に機能しているように見えます。

私は次のファイルシステムを持っています...

---MarketData
   ---Parser
      ---Parser.py
      ---__init__.py
   ---IO
      ---__init__.py
      ---MarketSocket.py

現在、パーサーとIOはPythonパッケージとして定義されています(パーサーのinit .pyファイルにはコードがありませんが、init.pyファイルがあります

MarketSocket.pyで次のコード行を実行しようとしています

from Parser import Parser

モジュール「パーサー」をパッケージ「パーサー」内にインポートする必要がありますが、次のエラーが発生します。

ImportError: No Module Named Parser

どんな助けでもいただければ幸いです!これはstackOverflowの同様の問題に従って機能するはずですが、奇妙な理由で機能しません。

4

4 に答える 4

2

MarketSocket.pyディレクトリにありIOます。したがって、パッケージを見つけることはできませんParser

これを解決する最善の方法は、相対インポートです。from ..Parser import Parserただし、次のようなスクリプトを開始すると、機能しない場合がありますpython MarketSocket.py。これを使用するには、ディレクトリにを追加する必要もあり__init__.pyますMarketData

それが機能しない場合は、次のsys.pathように拡張します。

import sys
sys.path.append('../')

この追加により、Pythonは必要なパスも検索します。

もし私があなたなら、あなたのプロジェクトを再構築することも考えます。私の意見では、実行可能ファイルは(ほとんどの場合)作業ツリーの最上位にある必要があります。これもPythonが機能するようです。

于 2012-06-22T17:56:41.337 に答える
0

__init__.pyMarketDataディレクトリに(空の)を置くと、すべてがパッケージになります(そして醜いパスハックを回避します)。パッケージのトップレベルからモジュールを呼び出す場合は、これでうまくいくはずです。

于 2012-06-22T18:02:25.813 に答える
0

MarketSocket.pyはパーサーの1レベル下にあるため、表示できません

これを行う:

import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
sys.path.append(os.path.dirname(__file__))
于 2012-06-22T17:56:24.070 に答える
0

相対インポートで問題が発生しました。親ディレクトリでのみ、子パッケージ/モジュールにアクセスできます。したがって、MarketSocket.pyでは、

from ..Parser import Parser

次に、-mオプションを指定して実行する場合、コツは最上位ディレクトリで実行する必要があることです。したがって、この場合は1)MarketDataの親ディレクトリに移動します2)その親ディレクトリでpython-mMarketData.IO.marketSocketを実行します

于 2015-01-30T20:35:42.863 に答える