私はimport.py
のスクリプトを持っています。私はm1.py
、言って、別のファイルにいくつかのコードを抽出したい:Pythonスクリプトを相対インポートを使用して複数のファイルに分割する方法は?
$ ls
import.py m1.py
$ cat import.py
from .m1 import a
a()
$ cat m1.py
def a():
print('it works')
$ python import.py
Traceback (most recent call last):
File "import.py", line 1, in <module>
from .m1 import a
ModuleNotFoundError: No module named '__main__.m1'; '__main__' is not a package
私は絶対輸入に切り替え、それが動作します。しかし、私は間違って他のモジュールをインポートしたくない。私はスクリプトのディレクトリからモジュールがインポートされていることを確認したい。私はそれをどのように機能させるのですか?または私は何を間違っているのですか?
[doc](https://docs.python.org/3/tutorial/modules.html#the-module-search-path)には、「spamという名前のモジュールをインポートすると、インタープリタは最初にその名前のモジュールを見つけます。見つからなければ、変数[sys.path](https://docs.python.org/3/library/)で指定されたディレクトリのリストでspam.pyという名前のファイルを検索します。 sys.html#sys.path)。 "だから私はモジュールのスクリプトのディレクトリからの組み込みモジュールをオーバーライドすることはできません。 –
はい、あなたは書き込みです。あなたの上書きするモジュールがあなたのPATHディレクトリの1つを見つけたならば、私が上で述べたことはうまくいくでしょう。独自のパッケージを作成することで確実に確認できます。現在のディレクトリに "my_package"というフォルダを作成し、そこに "\ _ \ _ init \ _ \ _"を作成します。py 次に、my_packageフォルダにm1.pyファイルを移動します。 my_package import m1 m1.a() – omargamal8
私はちょうどあなたの言葉を修正していました(回答の中のもの、組み込みモジュールに関するもの)。私はあなたの答えがもっと好きです。パッケージの作成に関しては、どのような違いがありますか? –