web-dev-qa-db-ja.com

PyCharmエラー:自分のモジュールをインポートしようとしたときに 'No Module'が発生する(pythonスクリプト)

私はモジュール(my_mod.pyフォルダーにあるファイルmy_moduleファイル)を書きました。現在、フォルダcool_script.pyにあるファイルcur_projで作業しています。私はPyCharmの中でFile-openを使ってフォルダを開いています(そしてそれはPyCharmプロジェクトだと思います)。

ProjectView(CMD-7)では、私のプロジェクトcur_proj(赤)と "External Libraries"の下にmy_moduleがあります。 cool_script.pyでは、書くことができます

from my_module import my_mod as mm

そしてPyCharmはmy_modに対してさえ提案をします。ここまでは順調ですね。

しかし、cool_script.pyを実行しようとすると、PyCharmが「my_moduleという名前のモジュールはありません」と表示します。

これは私には奇妙に思えます。

A)端末(OS 10.10.2)では、Pythonで、私は問題なくモジュールをインポートすることができます - .bashrcのPYTHONPATHに対応するエントリがあります。

B)PyCharmで - 設定 - プロジェクトcur_proj - プロジェクトインタプリタ - pythonインタプリタの隣のCogWheel - もっと - 選択したインタプリタアイコンのパスを表示、PYTHONPATHからのパスは現われる(私が思うべき)

それ故、私がcool_script.pyを実行しようとするとなぜエラーが出るのですか? - 何が足りないのですか?

ノート:

補遺2015年2月25日

私の現在のプロジェクトで、実行 - 設定の編集にPyCharmを起動すると、チェックマーク付きで選択される2つのオプションがあります: "コンテンツルートをPYTHONPATHに追加する"と " ソースルートをPYTHONPATHに追加します。 "両方のチェックを外したときは、自分のモジュールをロードできます。

それで今それはうまくいく - しかしなぜ

さらなる疑問が浮かび上がった。

  • 「コンテンツのルーツ」とは何ですか?また「ソースのルーツ」とは何ですか?そしてPYTHONPATHに何か追加するとどうしてそれが壊れるのでしょうか。
  • 両方のオプションを常にオフにしておく必要があります(デフォルトでも、プロジェクト固有の設定だけではなく([Run/Debug Configurations]ダイアログの左側のパネル)も)。
113
Claus

自分のモジュールが同じパスにある場合は、そのパスをSources Rootとしてマークする必要があります。プロジェクトエクスプローラで、インポートしたいディレクトリを右クリックします。次にMark Directory Asを選択し、Sources Rootを選択します。

これが役に立つことを願っています。

244
Beatriz Fonseca

PyCharmコミュニティ/プロフェッショナル2018.2.1

私は今この問題を抱えていたので、@ Beatriz Fonsecaと@Julieが指摘したのと同様の方法でそれを解決することができました。

File - > Settings - > Project: YourProjectName - > Project Structureの順に進むと、現在作業中のプロジェクトのディレクトリレイアウトが表示されます。自分のディレクトリをたどって、それらをSourceディレクトリとしてラベル付けする必要があります。すべてのソースファイルに対して、またはインポート専用のファイルのResourceフォルダとして。

また、__init__.pyファイルをリソースディレクトリ内、または実際にインポートしたい場所に配置するようにします。これで問題なく動作します。

私はこの答えが誰かに役立つことを願っています、そしてうまくいけばJetBrainsはこの迷惑なバグを修正するでしょう。

15
Oleg Silkin

私が試したのは私のファイルがある場所を探すことです。

例えばE:\git_projects\My_project\__init__.py is my location.

私はFile - > Setting - > Project:My_project - > Project Structureの順に行き、言及場所E:\git_projects\My_projectにコンテンツルートを追加しました。

それは私のために働きました。

6
Virendra Patel

my_moduleはモジュールではないフォルダーであり、フォルダーをインポートすることはできません。my_mod.pycool_script.pyと同じフォルダーに移動してからdoimport my_mod as mmを移動してみてください。これは、pythonが現在のディレクトリとsys.pathのみを調べ、同じディレクトリにない限りmy_mod.pyを見つけられないためです。

あるいは、他のディレクトリからインポートする方法を説明している回答がある場合は、 こちら を参照してください。

あなたの他の質問に関しては、私はPyCharmを使っていないので私は知りません。

4
EpsilonX

これは、Pythonインタプリタがあなたのコードを見つけられないときに起こります。この場所で自分のコードを見つけるには、Pythonに明示的に言及する必要があります。

そうするには:

  • あなたのPythonコンソールに行ってください
  • Pythonコンソールにsys.path.extend(['your module location'])を追加してください。

あなたの場合:

  • あなたのPythonコンソールに行ってください。
  • 始めに、次のコードを書きます。

    import sys
    sys.path.extend([my module URI location])
    
  • この文を書いたら、次のコマンドを実行できます。

    from mymodule import functions
    
2
Shravan Shetty

「PYTHONPATHにソースルートを追加する」というエラーも出ていました。私の問題は、project/subproject1/thing/srcproject/subproject2/thing/srcのように同じ名前の2つのフォルダーがあり、その両方にソースルートとしてマークを付けたことです。 "thing"フォルダの1つを"thing1"(任意の一意の名前)に名前変更したとき、それはうまくいきました。

もしPyCharmが選択されたソースルートを自動的に追加するのであれば、それはフルパスを使用せず、それ故同じ名前のフォルダを混同します。

2

実行しなければならないソースファイルの実行設定を再作成して、IDEが新しいパスを選択するようにすることが重要な混乱を招く手順です。

実際に私にとってうまくいった方法は、Run/Edit Configurations ...に行き、左側で実行しようとしているファイルの設定を選択し、「PYTHONPATHにソースルートを追加する」ボックスのチェックを外して保存し、それから戻ってボックスをチェックして保存します。それがうまくいくでしょう。

2
tomchappell

そうならあなたがに行く場合

- >設定 - >プロジェクト:My_project - >プロジェクト構成

ソースコードが利用可能なディレクトリだけを「ソース」としてマークします(uは同じウィンドウに表示されます)。ソースコードを含むディレクトリが青に変わります。今、同じディレクトリに存在するモジュールをインポートすることができます。

1
JRD

ディレクトリをソースルートとしてマークする必要なしにこの問題を解決するには、実行設定を編集し、実行中に "Redirect input from"オプションを選択し、実行したいスクリプトを選択します。スクリプトがこのディレクトリで対話的に実行されたかのように扱われるため、これは機能します。ただし、Pythonはモジュール名に「no module named x」というエラーを表示します。

Redirect input from:

インタプリタがimport文を実行すると、次のソースから組み立てられたディレクトリのリストでx.pyを検索します。

  1. 入力スクリプトが実行されたディレクトリ、またはインタプリタが対話的に実行されている場合は現在のディレクトリ
  2. PYTHONPATH環境変数(設定されている場合)に含まれるディレクトリのリスト。
  3. Pythonがインストールされた時に設定されたディレクトリのインストール依存リスト、私の場合はUbuntuのusr/lib/python3.6。
0
PyFox

私のために働いた答えは確かにOPが彼の2015年の更新で言及しているものでした:uncheck これら二つのボックス あなたのPythonの実行設定で:

  • "PYTHONPATHにコンテンツルートを追加する"
  • "PYTHONPATHにソースルートを追加する"

Run configが適切なvenvを使うように設定されているので、PyCharmはパスに物事を追加するための追加作業をする必要はありませんでした。代わりにそれはエラーを引き起こしていました。

0
Hober

コンテンツルートはプロジェクトコードを保持するフォルダですが、ソースルートも同じように定義されています。私が理解した唯一の違いは、ソースルートのコードがコンテンツルートのコードの前に構築されているということでした。

チェックを外しても、Djangoに手動で接続されているパッケージ内に別々のモジュールを作っていない限り、ランタイムには影響しません。つまり、あなたのファイルが 'from Django import ...'を持っていないか、Django経由で呼び出されていない関数がある場合、これら2つのオプションのチェックを外すと誤動作を起こします。

更新 - この問題は、Virtual Environmanetを使用している場合、および提供されている端末を介してプロジェクトを制御している場合にのみ発生します。原因ターミナルは、仮想環境ではなくデフォルトのシステムpyhtonpathを介して動作します。 python Djangoコントロールパネルは問題なく動作します。

0
RA123

ln -s someProject

SomeDirectory/someProjectDirと2つのファイルfile1.pyとfile2.pyがあり、file1.pyがこの行でインポートしようとしている場合

someProjectDirインポートファイル2から

たとえあなたがsomeProjectDirをソースディレクトリとして指定したとしても、それが環境設定、プロジェクト、プロジェクト構造メニューにコンテンツルートとして表示されたとしてもそれは機能しません。これが機能する唯一の方法は、上記のようにプロジェクトをリンクすることです(unixコマンド、macで動作しますが、Windowsの使用法や構文は不明)。ソフトリンクは依存プロジェクトでPycharmによって作成されたので、Pycharmがバージョン管理からのチェックアウトまたはコンテキストルートとしての追加のいずれかで自動的にこれを行うメカニズムがあるようです。したがって、ディレクトリの奇妙な複製は面倒であり、必要性は複雑ですが、同じものをコピーするだけです。 autoが作成した依存関係でも、バージョン管理下では新しいディレクトリとして表示されません。おそらく.ideaファイルを比較するともっと明らかになるでしょう。

0
user10895922

作業ディレクトリが正しく設定されていないときにこのエラーを受け取りました。フレッシュなインストールだったのでそれは非常に奇妙でした、そして私はPyCharmがルートディレクトリの代わりにプロジェクトの作業ディレクトリとしてランダムなディレクトリを使用する理由を考えることができません

0
Ruslan

Pycharm 2017.1.1

  1. View->ToolBarView->Tool Buttonsをクリック
  2. 左ペインにProjectが表示されたら、それを右クリックしてAutoscroll to sourceを押してからコードを実行します。

これは私のために働きました。

0
AB Abhi