有沒有辦法讓py2exe將靜態文件(和/或靜態文件的子目錄)嵌入到library.zip和/或exe文件本身(zipfile =無),然後在運行時透明地從代碼中訪問這些嵌入式靜態文件?Py2exe:將靜態文件嵌入library.zip或exe文件本身,並在運行時透明地訪問它們
謝謝 馬爾科姆
有沒有辦法讓py2exe將靜態文件(和/或靜態文件的子目錄)嵌入到library.zip和/或exe文件本身(zipfile =無),然後在運行時透明地從代碼中訪問這些嵌入式靜態文件?Py2exe:將靜態文件嵌入library.zip或exe文件本身,並在運行時透明地訪問它們
謝謝 馬爾科姆
這聽起來像您需要的食譜:Extend py2exe to copy files to the zipfile where pkg_resources can load them
使用有效地大概需要pkg_resources一定的瞭解這是關係到setuptools(的一部分),是從哪裏來的「Python的雞蛋」。
只是想我會在這裏分享這也爲那些受益仍在尋找答案:
Py2exe: Embed static files in exe file itself and access them
不幸的是,py2exe已經改變了他們的作品模塊,這樣的例子提供here做不工作了。
我已經能夠通過覆蓋py2exe的一個函數來做到這一點,然後將它們插入到由py2exe創建的zip文件中。
下面是一個例子:
import py2exe
import zipfile
myFiles = [
"C:/Users/Kade/Documents/ExampleFiles/example_1.doc",
"C:/Users/Kade/Documents/ExampleFiles/example_2.dll",
"C:/Users/Kade/Documents/ExampleFiles/example_3.obj",
"C:/Users/Kade/Documents/ExampleFiles/example_4.H",
]
def better_copy_files(self, destdir):
"""Overriden so that things can be included in the library.zip."""
#Run function as normal
original_copy_files(self, destdir)
#Get the zipfile's location
if self.options.libname is not None:
libpath = os.path.join(destdir, self.options.libname)
#Re-open the zip file
if self.options.compress:
compression = zipfile.ZIP_DEFLATED
else:
compression = zipfile.ZIP_STORED
arc = zipfile.ZipFile(libpath, "a", compression = compression)
#Add your items to the zipfile
for item in myFiles:
if self.options.verbose:
print("Copy File %s to %s" % (item, libpath))
arc.write(item, os.path.basename(item))
arc.close()
#Connect overrides
original_copy_files = py2exe.runtime.Runtime.copy_files
py2exe.runtime.Runtime.copy_files = better_copy_files
謝謝達倫。問候,馬爾科姆 – Malcolm 2010-09-24 13:45:31