pyinstaller:从导入的模块

时间:2016-11-18 16:43:25

标签: python-3.x pyinstaller

我正在尝试使用pyinstaller打包PyQt应用程序。我简单的目录树如下所示:

maindir/
├── build/
├── dev_tool.py
├── dev_tool.spec
├── dist
│   └── dev_tool/
└── ...

当我从dev_tool文件夹

运行可执行文件dist/

$ ./dist/dev_tool/dev_tool

我收到无法找到.../dev_tool/langdetect/utils/messages.properties的错误。但是,当我手动添加langdetect文件夹(我只是在pip install langdetect之后从我的python site-packages中复制了它)之后就可以了。现在我读到了如何通过在.spec - 文件here中定义文件来添加文件,但是,如果我尝试将langdetect/文件夹从我的Python站点包复制到{ {1}}这样的文件夹,它仍然不起作用。

我在dist/dev_tool/文件

中添加了以下行
dev_tool.spec

这不应该复制从site-packages langdetect文件夹到a = Analysis (... datas=[('path_to.../site-packages/langdetect', 'dist/dev_tool/langdetect')] ...) 的所有内容吗?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用PyInstaller中的Tree课程。

# dev_tool.spec
langdetect_toc = Tree('C:\\[site-packages]\\langdetect',
                      prefix='langdetect',
                      excludes=['*.py','*.pyc', '*test*'])
a.datas += langdetect_toc

然后以pyinstaller作为参数运行dev_tool.spec会将langdetect中的所有必要数据文件放入dist\dev_tool\langdetect,以便dev_tool可以在运行时找到它们。

答案 1 :(得分:0)

这对我有用:

a = Analysis(
    # your other stuff here...
    datas=[
        ('langdetect/utils', 'csg_fileutil_libs/langdetect/utils'),  # for messages.properties file
        ('langdetect/profiles', 'csg_fileutil_libs/langdetect/profiles'),
          ]
    # the rest of your analysis spec...
    )