问候!
我正在尝试使用PyInstaller进行构建。
配置:Python 3.6.5
pip 10.0.1
,操作系统:Ubuntu 18.04
。使用virtualenv
(也尝试使用python -m venv
)。
我的应用程序使用apscheduler
,websocket
,_thread
,似乎某些相关模块存在导入问题。
尝试过pyinstaller --onefile mymain.spec
和pyinstaller --onedir mymain.spec
。在两种情况下问题仍然存在。如果没有冻结,程序将正常运行。
这是我尝试运行生成的可执行文件时遇到的错误:
Traceback (most recent call last):
File "apscheduler/schedulers/base.py", line 882, in _create_plugin_instance
KeyError: 'interval'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "cmonitorcli/services/socket_client.py", line 70, in run
File "cmonitorcli/services/scheduler.py", line 36, in add_update_job
File "apscheduler/schedulers/base.py", line 413, in add_job
File "apscheduler/schedulers/base.py", line 907, in _create_trigger
File "apscheduler/schedulers/base.py", line 890, in _create_plugin_instance
LookupError: No trigger by the name "interval" was found
^CTraceback (most recent call last):
File "websocket/_app.py", line 283, in run_forever
File "websocket/_app.py", line 50, in read
KeyboardInterrupt
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "cmonitorcli/main.py", line 20, in <module>
File "cmonitorcli/main.py", line 8, in main_job
File "cmonitorcli/client.py", line 29, in __init__
File "cmonitorcli/services/socket_client.py", line 31, in connect
File "websocket/_app.py", line 283, in run_forever
KeyboardInterrupt
模块导入警告:
missing module named 'multiprocessing.forking' - imported by /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/venv/lib/python3.6/site-packages/PyInstaller/loader/rthooks/pyi_rth_multiprocessing.py
missing module named multiprocessing.get_context - imported by multiprocessing, multiprocessing.pool, multiprocessing.managers, multiprocessing.sharedctypes
missing module named multiprocessing.TimeoutError - imported by multiprocessing, multiprocessing.pool
missing module named multiprocessing.BufferTooShort - imported by multiprocessing, multiprocessing.connection
missing module named multiprocessing.AuthenticationError - imported by multiprocessing, multiprocessing.connection
missing module named multiprocessing.set_start_method - imported by multiprocessing, multiprocessing.spawn
missing module named multiprocessing.get_start_method - imported by multiprocessing, multiprocessing.spawn
missing module named multiprocessing.SimpleQueue - imported by multiprocessing, concurrent.futures.process
missing module named pyimod03_importers - imported by /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/venv/lib/python3.6/site-packages/PyInstaller/loader/rthooks/pyi_rth_pkgres.py
missing module named 'pkg_resources.extern.pyparsing' - imported by pkg_resources._vendor.packaging.requirements, pkg_resources._vendor.packaging.markers
missing module named StringIO - imported by six, pkg_resources._vendor.six
missing module named 'win32com.shell' - imported by pkg_resources._vendor.appdirs
missing module named 'com.sun' - imported by pkg_resources._vendor.appdirs
missing module named com - imported by pkg_resources._vendor.appdirs
missing module named win32api - imported by pkg_resources._vendor.appdirs
missing module named win32com - imported by pkg_resources._vendor.appdirs
missing module named 'ctypes.macholib' - imported by ctypes.util
missing module named netbios - imported by uuid
missing module named win32wnet - imported by uuid
missing module named __builtin__ - imported by pkg_resources._vendor.pyparsing
missing module named ordereddict - imported by pkg_resources._vendor.pyparsing
missing module named __main__ - imported by pkg_resources
missing module named pkg_resources.extern.packaging - imported by pkg_resources.extern, pkg_resources
missing module named pkg_resources.extern.appdirs - imported by pkg_resources.extern, pkg_resources
missing module named 'pkg_resources.extern.six.moves' - imported by pkg_resources, pkg_resources._vendor.packaging.requirements
missing module named pkg_resources.extern.six - imported by pkg_resources.extern, pkg_resources
missing module named nt - imported by os, shutil, ntpath, /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/main.py
missing module named org - imported by pickle, /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/main.py
excluded module named _frozen_importlib - imported by importlib, importlib.abc, /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/main.py
missing module named _frozen_importlib_external - imported by importlib._bootstrap, importlib, importlib.abc, /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/main.py
missing module named _winreg - imported by platform, tzlocal.win32, /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/main.py, pkg_resources._vendor.appdirs
missing module named _scproxy - imported by urllib.request
missing module named java - imported by platform, /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/main.py
missing module named 'java.lang' - imported by platform, /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/main.py, xml.sax._exceptions
missing module named vms_lib - imported by platform, /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/main.py
missing module named winreg - imported by platform, mimetypes, tzlocal.win32, /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/main.py, urllib.request
missing module named msvcrt - imported by subprocess, multiprocessing.spawn, multiprocessing.popen_spawn_win32, /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/main.py, getpass
missing module named _winapi - imported by subprocess, multiprocessing.reduction, multiprocessing.connection, multiprocessing.heap, multiprocessing.popen_spawn_win32, /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/main.py
missing module named _dummy_threading - imported by dummy_threading, /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/main.py
missing module named 'org.python' - imported by copy, /home/hoop/PycharmProjects/cmonitorserv/cmonitorcli/main.py, xml.sax
missing module named funcsigs - imported by apscheduler.util
missing module named sets - imported by pytz.tzinfo
missing module named UserDict - imported by pytz.lazy
missing module named wsaccel - imported by websocket._utils
missing module named backports - imported by websocket._ssl_compat
missing module named socks - imported by websocket._http
missing module named "'six.moves.urllib'.parse" - imported by websocket._url
missing module named Cookie - imported by websocket._cookiejar
missing module named 'wsaccel.xormask' - imported by websocket._abnf
missing module named numpy - imported by websocket._abnf
missing module named win32evtlog - imported by logging.handlers
missing module named win32evtlogutil - imported by logging.handlers
requirements.txt :
jsonpickle==0.9.6
pkg-resources==0.0.0
six==1.11.0
websocket-client==0.48.0
apscheduler==3.5.1
pyinstaller==3.3.1
我需要进行--onefile
的构建。
请注意使用hiddenimports
的示例,
missing module named 'wsaccel.xormask' - imported by websocket._abnf
missing module named numpy - imported by websocket._abnf
missing module named win32evtlog - imported by logging.handlers
和其他任何模块都无济于事-它们仍然带有missing module
标志在日志中显示
答案 0 :(得分:6)
基于Alex Grönholm
的回复:
问题确实是因为APScheduler
使用setuptools
入口点来查找触发器类。
解决方案是实例化触发器并传递给add_job()
:
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers import interval
scheduler = BackgroundScheduler()
trigger = interval.IntervalTrigger(seconds=3)
scheduler.add_job(lambda: job_func(ws), trigger=trigger, id='status_update_job', replace_existing=True)
答案 1 :(得分:5)
问题在于pyinstaller并未打包APScheduler查找触发器类所需的setuptools入口点。解决方法是手动导入和使用触发器。
答案 2 :(得分:-1)
pyinstaller --onefile。之后-查看.spec。所有缺少的模块均手动添加。 Pyinstaller的“自动配置规范”存在错误