Dans notre cas, la commande python setup.py --freeze bdist_msi
renvoie cette erreur :
Traceback (most recent call last):
File "setup.py", line 549, in <module>
sys.exit(main())
File "setup.py", line 545, in main
NuxeoDriveSetup(attribs)
File "setup.py", line 536, in __init__
**freeze_options
File "nx_cx_Freeze/__init__.py", line 173, in setup
cx_setup(**attrs)
File "/site-packages/cx_Freeze/dist.py", line 362, in setup
distutils.core.setup(**attrs)
File "/distutils/core.py", line 151, in setup
dist.run_commands()
File "/distutils/dist.py", line 953, in run_commands
self.run_command(cmd)
File "/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/site-packages/esky/bdist_esky/__init__.py", line 312, in run
self._run()
File "nx_esky/__init__.py", line 61, in _run
self._run_freeze_scripts()
File "/site-packages/esky/bdist_esky/__init__.py", line 345, in _run_freeze_scripts
self.freezer_module.freeze(self)
File "/site-packages/esky/bdist_esky/f_cxfreeze.py", line 71, in freeze
f.Freeze()
File "/site-packages/cx_Freeze/freezer.py", line 610, in Freeze
self.compress, self.copyDependentFiles)
File "/site-packages/cx_Freeze/freezer.py", line 586, in _WriteModules
path = os.pathsep.join([origPath] + module.parent.path)
TypeError: can only concatenate list (not "NoneType") to list
Malheureusement, l'exception n'aide pas vraiment. L'erreur se situe au niveau de path = os.pathsep.join([origPath] + module.parent.path
, il faudrait donc savoir de quel module
il s'agit.
Solution
Un moyen simple de déboguer le bousin est d'utiliser ipdb :
In [1]: pdb
Automatic pdb calling has been turned ON
In [2]: run setup.py --freeze bdist_msi
# ... + exception
L'exception nous envoie directement dans ipdb, affichons la variable qui nous intéresse :
ipdb> module
<Module name='collections._weakref', file='_weakref'>
Par chance, nous n'en avons pas besoin, il suffit de l'ajouter aux modules exclus dans le fichier setup.py :
excludes = [
...,
'collections._weakref',
]
Répétez l'opération autant de fois que nécessaire.
Sources :
- NXDRIVE-1051: Packaging does not work anymore
- cx_freeze未能创建exe与熊猫库 - cx_freeze fails to create exe with pandas library
Historique
- 2018-06-11 : Suppression de la fausse information (merci à Toilal et Knah Tsaeb).