基本的にpythonファイルのような場合:
python-code.py
そして使用:
import (python-code)
インタプリタは構文エラーを出します。
それを修正する方法についてのアイデアはありますか? pythonファイル名にダッシュは違法ですか?
PEP 8 、Pythonコードのスタイルガイド:
パッケージ名とモジュール名モジュールには、すべて小文字の短い名前を付ける必要があります。読みやすさを改善する場合は、モジュール名にアンダースコアを使用できます。 Pythonパッケージには、すべて小文字の短い名前を付ける必要がありますが、アンダースコアの使用は推奨されません。
モジュール名はファイル名にマッピングされ、一部のファイルシステムでは大文字と小文字が区別されず、長い名前が切り捨てられるため、モジュール名はかなり短く選択することが重要です。これはUnixでは問題になりませんが、コードが古いMacまたはWindowsバージョン、またはDOSに転送されるときの問題。
つまり、ファイルの名前を変更します:)
コードで注意すべきもう1つの点は、インポートは関数ではないということです。したがって、import(python-code)
はimport python-code
これは、既に述べたように、「import python minus code "」と解釈され、意図したものではありません。本当に名前にダッシュを含むファイルをインポートする必要がある場合、次のことができます。
python_code = __import__('python-code')
ただし、前述のとおり、これは実際には推奨されません。制御するファイルの場合は、ファイル名を変更する必要があります。
[〜#〜] tldr [〜#〜]
ダッシュはnot違法ですが、次の3つの理由で使用しないでください。
ダッシュ付きのファイル名をインポートする必要がある場合、特別な構文は次のとおりです。
module_name = __import__('module-name')
なぜ特別な構文が必要なのか興味がありますか?
特別な構文の理由は、import somename
識別子somename
を使用してモジュールオブジェクトを作成しています(したがって、後でsomename.funcname
)。もちろん module-name
は有効な識別子ではないため、有効な識別子を提供する特別な構文です。
module-nameが有効な識別子ではない理由がわかりませんか?
心配しないでください-私もしませんでした。役立つヒントを次に示します。これを見てくださいpython line:x=var1-var2
。割り当ての右側に減算があるか、ダッシュ付きの変数名がありますか?
[〜#〜] ps [〜#〜]
他のすべての回答からの最も関連性のある情報と考えられるものを1か所に含めることを除いて、回答のオリジナルはありません
問題はそれです python-code
は識別子ではありません。パーサーはこれをpython
マイナスcode
と見なします。もちろん、これはあなたが求めていることをしません。有効なpython識別子でもあるファイル名を使用する必要があります。-
アンダースコア付き。
おそらく__import__
ハックしますが、方法がわからない場合は、すべきではありません。 Pythonモジュール名は有効な変数名(「識別子」)である必要があります-モジュールがある場合はfoo_bar
、Python(print foo_bar
)。変な名前(print foo-bar
->構文エラー)。
適切なファイルの命名が最善の方法ですが、python-code
が制御できない場合、__import__
を使用するハックは、コピー、名前変更、または他の作成者のコードをいじるよりも優れています。ただし、試してみましたが、.py
拡張子を追加してファイルの名前を変更しない限り機能しませんでした。 ドキュメント を見て.py
の説明を取得する方法を導き出した後、次のようになりました。
import imp
try:
python_code_file = open("python-code")
python_code = imp.load_module('python_code', python_code_file, './python-code', ('.py', 'U', 1))
finally:
python_code_file.close()
最初の実行時に新しいファイルpython-codec
を作成しました。
On Python 3 use import_module :
from importlib import import_module
python_code = import_module('python-code')
より一般的には、
import_module('package.subpackage.module')