2016-08-08 1 views
0

私は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やって? ?

+0

pyinstallerは自分ではわかりませんが、作成した「単一ファイル」は何ですか?また、表示されているフォルダからの相対位置はどこですか? – Blckknght

+0

pyinstallerコマンド(テキスト)はバイナリmain.exeを生成します(私はウィンドウ上にあります)...次に、このmain.exeをroot(main.pyと同じレベル)に配置します。 –

+0

libのパスは、私はそれを把握することはできません... –

答えて

0

"あなたは正しいです - 単純に--hidden-import =を使うことはできません。-p DIRオプションと共に使用し、モジュールを含むフォルダを指す必要があります。また、追加データとしてファイルをバンドルしてみてください - 。8月8日午後02時31 「 で私は答えとしてこれをマーキングしています、successfuly --hiddenインポート& -bを使用してinstan.class私ができるよう...

クレジットに行く - > Repiklis

関連する問題