PyCharmエラー:独自のモジュール(Pythonスクリプト)をインポートしようとすると「モジュールなし」


160

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

ProjectView(CMD-7)では、自分のプロジェクトcur_proj(赤)が表示され、[ 外部ライブラリ]の下に表示され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で[実行-構成の編集]に移動すると、現在のプロジェクトに対して、「コンテンツルートをPYTHONPATHに追加する」と「ソースルートをPYTHONPATHに追加する」というチェックマークが付いた2つのオプションが選択されます。。両方をオフにすると、モジュールをロードできます。

それで今は機能しますが、なぜですか?

さらなる質問が浮上しました:

  • 「コンテンツルート」とは何ですか。「ソースルート」とは何ですか。そして、なぜPYTHONPATHに何かを追加すると、どういうわけか壊れるのですか?
  • これらのオプションの両方を常にオフにする必要がありますか(プロジェクトの特定の構成(実行/デバッグ構成ダイアログの左側のパネル)だけでなく、デフォルトでも)?

2
すでにこれを試したかもしれませんが、他のパッケージからモジュールをインポートするときは、packagenameを含めてくださいfrom foldername.mymodule import mymethod。私がしなければならないもう1つのことは、2つのフォルダーでinitが必要になる場合に備えて、モジュールにアクセスするために使用するすべてのフォルダーに空の_init .pyフォルダーを追加することですfrom parentfolder.childfolder.mymodule ...。フォルダーが互いに相対的に配置されている場所に応じてsys.path、この回答で
ziddarth

4
私もあなたの問題を抱えていました。次の投稿は私の問題解決stackoverflow.com/questions/21236824/...
user3155053

これらのチェックボックスのチェックを外すのではなく、実際にチェックを外す理由を特定しましたか?
Nithish Inpursuit Ofhappiness

私のために働いたのは、PyCharmのProバージョンのEnable Django Support設定Languages & Frameworks -> Djangoのチェックを外すことです。インポートの問題の原因となったdjangoコンソールを開いていました。
Eric Blum

回答:


324

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

これがお役に立てば幸いです。


9
これは私にとってはうまくいきましたが、フォルダーをソースルートとしてマークする前に、以前に作成した実行構成を削除して再作成する必要もありました。
2016

2
そして、追加する必要が__init__.py:Pythonは含むパッケージとしてディレクトリを扱う作るためにstackoverflow.com/questions/448271/...
ベアトリス・フォンセカ

pycharmを使用していない場合、これをどのように行いますか?まったく同じ問題が発生しています。
Boudewijn Aasman 2017

@BeatrizFonsecaはい、そうしました。私はそれを崇高に動作させることはできませんでしたが、pycharmをインストールしてここで答えを試しましたが、それは完全にうまくいきました。
Boudewijn Aasman 2017

@BoudewijnAasman .パッケージ名の前に使用して、このパッケージがローカルパッケージであることを指定できます
Beatriz Fonseca

37

だからあなたが行くなら

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

ソースコードが利用可能なディレクトリだけを「ソース」としてマークします(同じウィンドウで確認できます)。ソースコードのあるディレクトリは青くなります。これで、同じディレクトリにあるモジュールにインポートできます。


3
これは古い投稿だと思いますが、うまくいきました。
マイク

1
同じ答えに何度も遭遇して無視しましたが、今回は試してみましたがうまくいきました!
A.Ametov

29

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

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

あなたがに行く場合File- > Settings- > Project: YourProjectName- > Project Structure。、あなたは、現在で作業しているプロジェクトのディレクトリ構成を持っているよあなたはディレクトリを移動して、いずれかとして、それらをラベル付けする必要がありますSourceすべてのソースファイルのディレクトリ、またはResourceインポート専用のファイルのフォルダ。

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

この答えが誰かを助けてくれることを願っています。うまくいけば、JetBrainsがこの厄介なバグを修正してくれることを願っています。


2
これはPyCharm Professionalに固有のものではなく、PyCharm Communityエディションでも利用できます。プロジェクト構造で、モジュールを含むディレクトリを右クリックMark Directory asし、コンテキストメニューからを選択して、を選択しますSources Root
Astitva Srivastava

1
このソースルートの意味を教えてください。それは私の問題を解決しましたが、なぜ私がそれをしているのか完全には理解していませんでしたが。
user3341078

8

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

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

私はファイル->設定-> Project:My_project->プロジェクト構造に行き、コンテンツルートを約言及場所に追加しました E:\git_projects\My_project

それは私のために働いた。


2
私のために働いたプロジェクト構造のフォルダを入手してください。どうも。
Microos 2018年

@Virendra Patelと@Microosに感謝します。私のpycharmプロジェクトはにあり/home/my_user/git_projects/this_git_project/this_pycharm_project/ます。私/home/my_user/git_projects/this_git_project/はコンテンツのルートと/home/my_user/git_projects/this_git_project/this_pycharm_project/唯一のソースフォルダーとして追加し、すべてが最終的に機能しました。
KLaz

3

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

または、他のディレクトリからインポートする方法を説明する回答をここで見ることができます。

他の質問については、PyCharmを使用していないのでわかりません。


フォルダーにinit .py を作成できます。python
Beatriz Fonseca

3

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

PyCharmが選択されたソースルートを自動的に追加する場合、フルパスを使用しないため、同じ名前のフォルダーが混同される可能性があります。


2

これは、Pythonインタープリターがコードを見つけられない場合に発生する可能性があります。この場所でコードを見つけるには、Pythonに明示的に言及する必要があります。

そうするために:

  • Pythonコンソールに移動します
  • sys.path.extend(['your module location'])Pythonコンソールに追加します。

あなたの場合:

  • Pythonコンソールに移動し、
  • 最初に、次のコードを記述します。

    import sys
    sys.path.extend([my module URI location])
  • このステートメントを作成したら、次のコマンドを実行できます。

    from mymodule import functions

そのようなパスを追加するのは少し醜いですが、私にとってはうまくいきました。
Florian Blume、2018

これはpycharmによって自動的に行われます。コンソールを開くときに、依存関係(他のプロジェクト)を含むディレクトリと現在のプロジェクトのソースコードを含むディレクトリのsys.path.extendコマンドを含める必要があります。
しかし

2

実行する必要がある重要な混乱するステップは、実行しようとしているソースファイルの実行構成を再作成して、IDEが新しいパスを取得するようにすることです。

私にとって実際に機能した方法は、「構成の実行/編集...」に移動し、左側で実行しようとしているファイルの構成を選択し、「ソースルートをPYTHONPATHに追加する」チェックボックスをオフにして保存します。次に戻ってチェックボックスをオンにして保存します。その後、それはうまくいくでしょう。


驚くべきことに、これは私がInvalidate Cache/Restart二度やったにもかかわらず、私が必要とするものでした!
ジョシュフリードランダー

1

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

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

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


1

ディレクトリをソースルートとしてマークする必要のないこの問題の解決策は、実行構成を編集し、実行でオプション「入力をリダイレクトする」を選択して、実行するスクリプトを選択することです。これは、スクリプトがこのディレクトリで対話的に実行されたかのように扱われるため、機能します。ただし、Pythonは引き続き「xという名前のモジュールはありません」というエラーでモジュール名をマークします。

次から入力をリダイレクト:

インタープリターがimportステートメントを実行すると、以下のソースから集められたディレクトリーのリストでx.pyを検索します。

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

0

Pycharm 2017.1.1

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

これでうまくいきました。


0

ln -s。someProject

someDirectory / someProjectDirと2つのファイルがある場合、file1.pyとfile2.py、file1.pyはこの行でインポートを試みます

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

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


-1

私にとってうまくいった答えは確かに、OPが2015年のアップデートで言及していることです。Python実行構成でこれらの2つのボックスをオフにします。

  • 「コンテンツルートをPYTHONPATHに追加します」
  • "ソースルートをPYTHONPATHに追加"

すでに適切なvenvを使用するように実行構成を設定していたので、PyCharmがパスに物事を追加するために追加の作業を行う必要はありませんでした。代わりに、それがエラーの原因でした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.