我有一个模块/包结构,我在使用命名空间包,我有多个用户创建的库,我保存在不同的存储库中,并且它们具有相当通用的名称,如db,io,utils等。为了避免与其他包冲突,我有一个名为acme的顶级/命名空间包,即我的包是acme.io,acme.db,acme.utils等。为了使其工作,所有acme文件夹中的__init__.py都有以下行
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
在运行使用python这些软件包的软件时,这很有效。
然后我尝试使用pyinstaller进行EXE。 pyinstaller只找到其中一个包。我试图将pathex设置为每个库所在的文件夹:
a = Analysis(['.\\src\\myPgogram.py'],
pathex=['C:\\Data\\python\\myProgram', 'C:\\Data\python\\dbrepo', 'C:\\Data\\python\\utilsrepo', 'C:\\Data\\python\\iorepo'],
hiddenimports=['acme', 'acme.io', 'acme.utils', 'acme.db'],
hookspath=None,
runtime_hooks=None)
在文件夹dbrepo,iorepo和utilsrepo中有一个名为acme的文件夹,上面提到了__init__.py文件和相应的包,即db,utils和io,再次带有__init__.py文件。 / p>
但是pyinstaller只能找到acme和acme.db包。或者它只找到pathex变量中首先列出路径的包。
有关如何使这项工作的任何提示?
由于
答案 0 :(得分:0)
我遇到了同样的问题。查看了这个:http://pythonhosted.org/PyInstaller/#extending-the-path并在我的构建批处理文件调用中添加了一些--paths
。
类似于:
@echo off
echo ========= %~n0 =========
set pyfile=scriptName.py
set pypath=C:\Python27\Scripts
set buildpath=%temp%
set distpath=%~dp0
%pypath%\pyinstaller.exe --onefile -y %~dp0%pyfile% --distpath=%distpath% --workpath=%buildpath% --specpath=%buildpath% --noupx --paths=D:\Tools\dev\python --paths=D:\somepath
喝彩!
答案 1 :(得分:0)
Pyinstaller 2.1不支持命名空间包,在以后的版本中将支持它。
我使用的解决方案是在我的构建脚本中,我暂时将lib复制到一个公共的acme文件夹,并将此路径添加到Analysis中的pathex。在* nix系统上,可以创建符号链接而不是复制回购。感谢Pyinstaller团队的Hartmut Goebel澄清了这个问题。