Jos*_*aro 3 python pyinstaller
我正在尝试使用pyinstaller 构建一个非常基本的python脚本:print 'hello world!'我正在尝试创建一个数据文件或二进制文件可用的数据文件目录.
我一遍又一遍地阅读文档,我尝试使用1.5,2.0和2.0版本的dev构建,我尝试使用--onefile和--onedir构建,我尝试在OS X上构建Linux,但由于某种原因,我的.spec文件中的datafile/tree语句似乎被忽略了.
以下是我尝试过的一些.spec文件变体:
coll = COLLECT(exe,
a.binaries
[('README','/Users/username/my_little_app/foo','DATA')],
Tree('/Users/username/my_little_app/foo','foo'),
Tree('/foo','foo'),
Tree('my_little_app/foo','foo'),
[('my_xml_file.xml','my_little_app/partner.xml','DATA')],
a.zipfiles,
a.datas,
strip=None,
upx=True,
name=os.path.join('dist', 'my_little_app'))
a.datas += [('my_xml_file.xml', '/Users/username/my_little_app/my_xml_file.xml', 'DATA')]
Run Code Online (Sandbox Code Playgroud)
有什么我想念的吗?
这个答案已经很晚了,但是将任意文件添加到PyInstaller构建的方法很清楚:
https://pythonhosted.org/PyInstaller/#adding-files-to-the-bundle
元组中的第一个字符串是文件的路径,第二个字符串是它在构建的包下的路径.换句话说,你的最后一行应如下所示:
a.datas += [("/path/to/my_xml_file.xml", "my_xml_file.xml")]
Run Code Online (Sandbox Code Playgroud)
您还可以添加如下所示的完整目录:
a.datas += [("/path/to/dir", "dir")]
Run Code Online (Sandbox Code Playgroud)
我已经添加了以下文档的相关部分.
要将文件添加到捆绑包,您需要创建一个描述文件的列表并将其提供给Analysis调用.
您提供了一个列表,将文件描述为datas=参数的值Analysis.数据文件列表是元组列表.每个元组都有两个值,两个值都必须是字符串:
例如,要将单个README文件添加到单文件夹应用程序,您可以按如下方式修改spec文件:
a = Analysis(...
datas=[ ('src/README.txt', 'README') ],
hiddenimports=...
)
Run Code Online (Sandbox Code Playgroud)
您已将datas=参数设为单项列表.该项是一个元组,其中第一个字符串表示现有文件src/README.txt.该文件将被复制到名称包中README.
如果在单独的语句中创建添加文件的列表,则spec文件更具可读性:
added_files = [
( 'src/README.txt', 'README' )
]
a = Analysis(...
datas= added_files,
...
)
Run Code Online (Sandbox Code Playgroud)
字符串可以使用/或\作为路径分隔符.您可以使用"glob"缩写指定输入文件.当输入是多个文件时,输出字符串可以是文件夹的名称.例如,要包含.mp3特定文件夹中的所有文件:
added_files = [
( '/mygame/sfx/*.mp3', 'sfx' ),
( 'src/README.txt', 'README' )
]
Run Code Online (Sandbox Code Playgroud)
匹配的所有文件/mygame/sfx/*.mp3将被复制到包中并存储在名为的文件夹中sfx.
输入文件或文件夹的路径可以是第一个元组中的绝对路径,也可以是第二个元组中的相对路径.当它是相对的时,它被视为相对于spec文件的位置.
您还可以包含文件夹的全部内容:
added_files = [
( '/mygame/data', 'data' ),
( '/mygame/sfx/*.mp3', 'sfx' ),
( 'src/README.txt', 'README' )
]
Run Code Online (Sandbox Code Playgroud)
所有文件/mygame/data将以递归方式复制到data包中指定的文件夹中.