web-dev-qa-db-ja.com

pycharmプロジェクトの同じサブディレクトリにあるpythonファイルをインポートする方法

デバッグおよび実行中に、pycharmに入力エラーがあります。

私のプロジェクト構造は、etc./HW3/.が適切にルート化されているため、HW3がルートディレクトリになります。

HW3にサブフォルダーutilとファイルutil/util.pyがあります。 utilにはrun_tests.pyという別のファイルがあります。

run_tests.pyには、次のインポート構造があります。

from util.util import my_functions, etc.

これにより、入力エラーfrom util.util import load_dataset,proportionate_sample ImportError: No module named 'util.util'; 'util' is not a packageが生成されます


ただし、まったく同じプロジェクトで、utilという別のディレクトリ(dataと同じレベル)に、data/data_prep.pyから関数をインポートするutil/util.pyというファイルがあります。同様のインポート文...そして問題なく実行されます。


明らかに、宿題の過程でこれをやっているので、理解してください。これは宿題の範囲に付随するものです。


ファイルを別のディレクトリに移動すると、問題はなくなります。だから、この質問はpycharmプロジェクトの同じディレクトリにあるpythonファイルをインポートするにはどうすればいいですか? pycharmはimport utilと入力し、ルートのフルネームを使用するように促します。

27
donlan

__init__.pyがない場合は作成してこの行を追加してください

from util.util import my_function

__init__.pyがpythonにそのフォルダーをpythonパッケージとして扱う必要があることを伝えるスクリプトにモジュールを簡単にインポートできます。また、インポート/ロードにも使用できます。モジュールも。

ほとんどの場合、__init__.pyは空です。

ドキュメントを引用する

__init__.pyファイルは、Pythonがディレクトリをパッケージを含むものとして扱うために必要です。これは、文字列などの共通名を持つディレクトリが、後でモジュール検索パスで発生する有効なモジュールを意図せずに隠さないようにするために行われます。最も単純なケースでは、__ init__.pyは空のファイルになりますが、パッケージの初期化コードを実行したり、後で説明する__all__変数を設定したりすることもできます。

13
danidee

推奨される方法:

作業フォルダーをSourcesとして設定してください。

Pycharm->Preferences->Project: XYZ->Project Structure

作業フォルダーを選択し、Sourcesとしてマークします。次に、Pycharmは作業フォルダーをプロジェクトのソースフォルダーとして認識し、次を使用してそのフォルダー内に他のファイルを簡単に追加できます。

import filename.py

または

from filename.py import mudule1

=================

推奨されない方法:

Pycharmには、単に. の前に .pyファイルを同じフォルダからインポートします。あなたの場合、それは

from .util import my_functions
48
imanzabet

注:少し無関係かもしれません。

私は同じ問題に直面していましたが、jupyter Notebook(ここではディレクトリに__init__.pyがありませんでした)。奇妙なことに、私はpythonパスとインタープリターの場所などをセットアップしました。他の回答はどれも助けになりませんでしたが、pythonのディレクトリを変更しても役に立ちました。

import os
os.chdir(/path/to/your/directory/)

PyCharm 2017.3Ubuntu 16.04を使用しています

1
imsrgadich

私はpycharmでも同じ問題を抱えていましたが、実際の間違いは、スタンドアロンスクリプトとして実行できたにもかかわらず、インポートしようとしたファイルに.py拡張子がなかったことです。 Explorerウィンドウを見て、拡張子が.pyであることを確認します。そうでない場合は、エクスプローラウィンドウでファイルを右クリックし、リファクタリングを選択して、拡張子を.pyに変更します。

1
Odysseus Ithaca