私はGETATTRを使用していますが、私はそれがpyInstallerのpyinstallerによってパックされたpythonプロジェクトの文字列から特定のクラスをインスタンス化するhowto?
短い要約で作業を行いカント:Pythonの3.5.1
- | |アナコンダ4.0.0(64ビット) (デフォルト、Feb 16 2016、09:49:46)win32の[MSC v.1900 64ビット(AMD64)]
- pyinstallerによって1つのファイルにパッケージされています
- 私はスクリプトを使用して外部テキストファイルを持っていますSubs.py)Subs.pyで
私のプロジェクトカントインスタンス化クラスの潜水..
私はpyInstallerのことで、プロジェクトをパックする前に、私はSubs.pyから潜水艦のインスタンスを作成することができます。.. あなたがアドバイスしてくださいすることができます下の例で何が間違っていますか?
私の問題を示すために、私は非常に簡単な例を用意しました。この時点で
class Subs():
def test(self):
print("test")
、期待通りに実行リターン: folder structure: root- #folder -to #folder -__init__.py #file -Subs.py #file -main.py #file
main.py:
import importlib
MyClass = getattr(importlib.import_module("to.Subs"), "Subs")
instance = MyClass()
instance.test()
Subs.py
python main.py
test
しかし、私はしてプロジェクトを詰める場合pyinstaller(ピップ経由で最新インストール) pyinstalle R main.py -F その後、私はルートにMAIN.EXEを移動し、実行しています:
main.exe
Traceback (most recent call last):
File "main.py", line 3, in <module>
MyClass = getattr(importlib.import_module("to.Subs"), "Subs")
File "importlib\__init__.py", line 126, in import_module
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 944, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named 'to'
Failed to execute script main
任意のアイデア、私が行方不明です何/ wroglyやって? ?
pyinstallerは自分ではわかりませんが、作成した「単一ファイル」は何ですか?また、表示されているフォルダからの相対位置はどこですか? – Blckknght
pyinstallerコマンド(テキスト)はバイナリmain.exeを生成します(私はウィンドウ上にあります)...次に、このmain.exeをroot(main.pyと同じレベル)に配置します。 –
libのパスは、私はそれを把握することはできません... –