Python3でPyDevを使用してパッケージを作成しています。私の.pyファイルの1つに相対的な単純なインポート、from . import filename
があります。私はパッケージからインポートしたファイルは、それがうまく動作しますが、PyDevは直接そのファイルを実行すると、このエラーで失敗したことをテストするために、パッケージの外に別のファイルを使用する場合:__name__ in Python、Pydev
ImportError: attempted relative import with no known parent package
検索の多くの後、私が見つかりました。インポートする前にコードを追加すると動作するコード:
__path__ = [""] # indicates local directory
__package__ = ["package_name"]
すべてが正常に動作します。しかし、そのファイルでは、私はこの行を置く:print(__name__)
出力は文字列です!
package_name
__main__
私はそれがパッケージ内だと直接実行されているからといって、これは疑うが、その後、私はif __name__ == "__main__":
のようなものをどのように行うのですか?私も変数がそれに割り当てられた2つの別個の文字列を持っている可能性がどのように理解していない
print(repr(__name__))
# output
'package_name'
'__main__'
print(__name__.endswith("__main__"))
# output
False
True
print(type(__name__))
# output
<class 'str'>
<class 'str'>
:
は、ここで私は__name__
VAR以上に周りめちゃめちゃにいくつかのより多くの出力です。何が起こっている?この既知のPythonの問題が... __main__
として実行ファイルさ
このファイルのように聞こえるのは、実際には2回実行されているということです。インポートシステムを混乱させるほど、いくつかの方法があります。 – user2357112
はるかに簡単な解決策は、パッケージの内容を直接実行しようとせず、同じファイルをインポート可能なモジュールとスクリプトにしないようにすることです。 – user2357112
@ user2357112これは2回実行されていますが、どのように起こる可能性がありますか?そしてあなたの他のコメントに答えて、私はこれが今私がやることだと思います。ファイルが実行可能なスクリプトである必要はありません。実行されていれば、エラーを生成しないようにするだけです。助けてくれてありがとう! – Cole128