如何从pyinstaller打包的python项目中的字符串实例化某些class?

howto instantiate certain class from string in python project packed by pyinstaller?

我正在使用 getattr,但我无法让它与 pyinstaller 一起工作

简短摘要:

我的项目无法在 Subs.py 中实例化 class Subs ..

在我通过 pyinstaller 打包项目之前,我可以从 Subs.py.. 你能告诉我,下面的例子有什么问题吗?

为了说明我的问题,我准备了一个非常简单的例子。 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:

class Subs():
    def test(self):
        print("test")

此刻,按预期执行return:

python main.py
test

但是如果我用 pyinstaller 打包项目(通过 pip 最新安装) pyinstaller main.py -F 然后我将 main.exe 移动到 root 并执行:

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

知道吗,我是什么 missing/doing wrogly? ?

“你是对的。简单地使用 --hidden-import=Subs 是行不通的。你必须将它与 -p DIR 选项一起使用并指向包含你的模块的文件夹。如果失败,你也可以尝试将文件捆绑为附加数据。 – 8 月 8 日 14:31 “ 我将此标记为答案,因为我可以通过使用 --hidden-import & -b...

成功 instan.class

归功于 ->Repiklis