Я боролся со следующим исключением во время выполнения и нашел решение, но я не совсем понимаю, почему это решение работает. В любом случае, я публикую свой код и решение на случай, если оно кому-нибудь поможет. Если кто-то точно понимает, почему это решает проблему, поделитесь своими мыслями. Исключение возникает во время выполнения с кодом, упакованным cx_freeze.
Вот исключение:
---------------------------
cx_Freeze: Python error in main script
---------------------------
Traceback (most recent call last):
File "C:\apps\Anaconda3\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 40, in run
module.run()
File "C:\apps\Anaconda3\lib\site-packages\cx_Freeze\initscripts\Console.py", line 37, in run
exec(code, {'__name__': '__main__'})
File "c:\fccc\svn\shared\py\idw_jobs_ui.py", line 21, in <module>
import sqla_declaratives.idw.bods_jobs.dag_ctrl as dc
File "C:\fccc\svn\shared\py\sqla_declaratives\idw\bods_jobs\dag_ctrl.py", line 4, in <module>
from sqla_utils.sqla_base import IdwBodsJobsBase
File "C:\fccc\svn\shared\py\sqla_utils\sqla_base.py", line 74, in <module>
class ClarityDboBase():
File "C:\fccc\svn\shared\py\sqla_utils\sqla_base.py", line 77, in ClarityDboBase
engine = sqla.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params, fast_executemany=True)#, echo = True) # uncomment to see all SQL
File "C:\apps\Anaconda3\lib\site-packages\sqlalchemy\engine\__init__.py", line 479, in create_engine
return strategy.create(*args, **kwargs)
File "C:\apps\Anaconda3\lib\site-packages\sqlalchemy\engine\strategies.py", line 61, in create
entrypoint = u._get_entrypoint()
File "C:\apps\Anaconda3\lib\site-packages\sqlalchemy\engine\url.py", line 172, in _get_entrypoint
cls = registry.load(name)
File "C:\apps\Anaconda3\lib\site-packages\sqlalchemy\util\langhelpers.py", line 268, in load
"Can't load plugin: %s:%s" % (self.group, name)
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:mssql.pyodbc
---------------------------
OK
---------------------------
Вот оригинальный скрипт Python cx_freeze (который не работал):
from cx_Freeze import setup, Executable
import os
import sys
buildOptions = dict(excludes = ['scipy'
, 'PyQt5'
, 'matplotlib'
, 'numpy'
, 'notebook'
, 'jedi']
, namespace_packages = ['sqla_utils'
, 'sqla_declaratives']
)
base = 'Win32GUI' if sys.platform=='win32' else None
py_app_to_build = os.path.join(os.environ['IDW_HOME']
, 'shared'
, 'py'
, 'idw_jobs_ui.py'
)
executables = [
Executable(script=py_app_to_build
, base=base
, targetName = 'idw_pltfrm_edtr.exe')
]
setup(name='idw_pltfrm_edtr',
version = '0.1',
description = 'IDW Platform Editor',
options = dict(build_exe = buildOptions),
executables = executables)