2016-09-27 4 views
1

いろいろな答え(relative import)を読んでいますが、単純なクラスをインポートする機能はありません。私はこのような構造を持っている:Pythonで作業ディレクトリに単純なクラスをインポートするには?

__init__.py (empty) 
my_script.py 
other_script.py 
my_class.py 

は、私は両方のスクリプト(my_script.pyと other_script.py )にmy_class.pyを使用します。すべての答えのように提案し、私はちょうど使用:

from .my_class import My_class 

が、私はいつも

SystemError: Parent module '' not loaded, cannot perform relative import

を取得し、私はのPython 3.5PyCharm 2016年1月2日を使用しています。 __init__.pyを設定する必要はありますか?どのようにして簡単なクラスをインポートできますか?

編集

すべてのファイルが作業ディレクトリにあります。私はPycharmを実行するだけで、クラスをインポートしようとするまで問題はありませんでした。

+4

ファイル名を 'class.py 'と名付けてはいけません。' class'はPythonで意味があります。 –

+0

笑、これは問題の理解を容易にするためのものでした。しかし良い点 – Rodrigo

答えて

1

現在の作業ディレクトリは、これらのファイルが含まれていない 1であることを確認してください。たとえば、__init__.pyへのパスがspam/eggs/__init__.pyの場合は、spamディレクトリで作業していることを確認してください。/path/to/spamsys.pathで、3番目の場所で作業しています。いずれにせよ、ディレクトリeggsで作業しようとしないでください。コードをテストするには、import eggsと言ってください。

推論は次のとおりです。 __init__.pyを使用しているので、このファイルのコレクションを明確にpackageとして扱いたいと思っています。パッケージとして動作するために、ディレクトリには、以下の基準の両方を満たす必要があります。

  1. は、それが呼ばれるファイルが含まれている__init__.py
  2. そのディレクトリが検索パスの一部(または親ディレクトリがあなたのです現在の作業ディレクトリ)。実際には、パッケージディレクトリはファイルになりすます必要があります。つまり、単一ファイルモジュールが見つかる可能性があります。

あなたは確かに、そこから簡単なimport my_classを行うことができます2.あなたが基準を満たすことはできません内部のパッケージディレクトリを作業している、しかし、あなたがしようとしている「相対インポート」のものは、機能の場合完全に機能するパッケージだけがサポートすることになります。

+0

そう...問題は作業ディレクトリです。クラスを作業ディレクトリにインポートできないのですか?そして、はい、すべてのファイルが作業ディレクトリにあります! – Rodrigo

+0

'my_class'をそこからインポートすることはできますが、複数のファイルをパッケージにまとめたい場合は、パッケージディレクトリ自体から離れてください。 (編集を参照) – jez

関連する問題