我想在.exe
本身中包含shapefile。
当我运行以下spec file
时,我的.exe
已创建,但我必须在同一文件夹中包含我的shapefile才能运行我的应用程序。
我想知道我是否可以使用shapefile列表打包我的应用程序,以便我的应用程序是自治的,并且不需要其他文件。
规范文件:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['map.py'],
pathex=['C:\\Users\\...\\PyQt5\\Qt\\bin', 'C:\\Users\\...\\Applications'],
binaries=[],
datas=[('C:\\Users\\...\\Applications\\data', 'dir')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='XXX',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=False )
仅供参考:我将所有shapefile保存在以下地址:C:\ Users \ ... \ Applications \ data
谢谢
答案 0 :(得分:0)
如何在python代码中引用外部文件?一旦应用程序捆绑在一起,外部文件将保存在一个临时目录中,您需要参考该目录。有关引用这些外部文件的讨论,请参阅此post。简而言之,您需要在引用之前更新资源文件的路径:
#resource_path is the relative path to the resource file, which changes when built for an executable
def resource_path(relative_path):
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath('.')
return os.path.join(base_path, relative_path)
并在您的代码正文中:
file = resource_path('data.txt')