- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试使用 PyInstaller 2.0 将我的 py 脚本捆绑为 .exe。我可以捆绑脚本,但在我的脚本中,我需要打开一个应该捆绑在 exe 中的文件(因此它是可移植的)。我在执行此操作时遇到了问题。。
在我的 .py 中,我有
filename = 'C:\path\to\my\file\doc.docx'
data = open(filename,'rb')
我使用 PyInstaller 2.0,这在我的计算机上运行良好,但如果我将 exe 传输到另一台计算机,它将无法运行。PyInstaller 2.0 是相当新的,所以它上面的文档很少,而且出版商的文档相当“缺乏”。
这是发布者关于此事的信息:(我认为他们的文档不是最新的,因为一开始它说使用 Configure.py,然后在其他文档中它说不再需要 Configure.py 2.0)
In a --onefile distribution, data files are bundled within the executable and then extracted at runtime into the work directory by the C code (which is also able to reconstruct directory trees). The work directory is best found by os.environ['_MEIPASS2']. So, you can access those files through:
os.path.join(os.environ["_MEIPASS2"], relativename))
这对我,一个初级程序员来说真的没有意义..
出版商的另一份文件说..
In a --onefile distribution, data files are bundled within the executable and then extracted at runtime into the work directory by the C code (which is also able to reconstruct directory trees). The work directory is best found by sys._MEIPASS. So, you can access those files through:
os.path.join(sys._MEIPASS, relativename))
我已经用 os.environ["_MEIPASS2"] 做了很多实验,python 似乎不理解 os.environment["_MEIPASS2"]。我回来了:
>>> print os.environ["_MEIPASS2"]
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
print os.environ["_MEIPASS2"]
File "C:\Python27\lib\os.py", line 423, in __getitem__
return self.data[key.upper()]
KeyError: '_MEIPASS2'
我也尝试过 sys._MEIPASS.. 是的,python 响应 'module' 没有属性 '_MEIPASS'。
在这一点上,我感觉我的脑袋要爆炸了。我感谢 PyInstaller 的作者所做的工作,但他们的文档是我见过的最糟糕的!我只需要有人帮我将文件捆绑到 exe 中。我真的很想使用 PyInstaller 2.0+,因为所有 .spec 的东西都让我对以前版本的 PyInstaller 感到困惑。
顺便说一句,我使用的是 Win8 64bit 和 python 2.7.3
请帮忙!
最佳答案
天哪!这个 PyInstaller 真的让我有点困惑。如果我以前的帖子听起来有点“粗鲁”,对此感到抱歉。无论如何,对于任何试图在 --onefile PyInstaller 包中包含文件的人来说,这对我有用:
将其包含在您的 .py 脚本中:
filename = 'myfilesname.type'
if hasattr(sys, '_MEIPASS'):
# PyInstaller >= 1.6
chdir(sys._MEIPASS)
filename = join(sys._MEIPASS, filename)
elif '_MEIPASS2' in environ:
# PyInstaller < 1.6 (tested on 1.5 only)
chdir(environ['_MEIPASS2'])
filename = join(environ['_MEIPASS2'], filename)
else:
chdir(dirname(sys.argv[0]))
filename = join(dirname(sys.argv[0]), filename)
感谢我不记得名字的网上某人..(对不起,来晚了,我筋疲力尽了!)
然后,如果你使用 PyInstaller2.0,在 cmd 中,从 pyinstaller-2.0 目录,你可以运行
pyinstaller.py --onefile myscriptsname.py
这将在 pyinstaller-2.0 目录中创建一个 myscriptsname.spec 文件。它还会创建一个 exe,但这不起作用。稍后会更新。现在编辑该 .spec,并添加以下 a.datas 行(记住数据,而不是数据)。我在 .spec 文件中添加了一些额外内容,仅供引用。
a = Analysis(['ServerTimeTest_nograph.py'],
pathex=['c:\\Python27\\pyinstaller-2.0'],
hiddenimports=[],
hookspath=None)
a.datas += [('myfilesname.type','C:\\path\\to\\my\\file\\myfilesname.type','DATA')]
pyz = PYZ(a.pure)
现在,回到 cmd,运行
pyinstaller.py --onefile myscriptsname.spec
这将更新/dist 目录中的 .exe。
也许有更好的方法,或者更漂亮的方法,但这对我有用!
关于python - PyInstaller 2.0 捆绑文件为 --onefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13946650/
我有一个应用程序,我想将其打包到一个文件中,但在使用 --onefile 选项(包括 html、js 和 css 文件)时遇到了问题。该过程在运行 --onedir 时运行良好(当然是在将各个数据文件
请阅读所有这篇文章并帮助我。 我想用 pyinstaller 创建 --onefile 可执行文件。 我在开发方面有这些: Windows 8.1 x64 Qt 5.2.1 python 27 PyQ
我用“pyinstaller --onefile myapp.py”打包了一个 python 应用程序,它创建了一个可执行文件,并且该应用程序运行良好。现在我希望能够从系统中导入一个模块(如果存在),
我知道我不是第一个提问的,但论坛上的其他答案帮不了我,所以我来提问。我有一个只有导入的简短(181 行)python 脚本 import numpy as np import matplotlib.p
我正在尝试使用 PyInstaller 构建一个包含图像和图标的单文件 EXE。我一辈子都无法让它与 --onefile 一起使用。 如果我这样做 --onedir 它工作得很好。当我使用 --one
我有一个有效的 Python 3 脚本 inventoryScraper.py,我正试图将其制作成一个我可以分发的 1 文件可执行文件。我一直在将 Pyinstaller 3 与 Python 3 一
我正在尝试将图像添加到 Pyinstaller 生成的一个文件中。我读过很多这样的问题/论坛 one那one但仍然无法正常工作。 我知道对于一个文件操作,PyinSTLler 会生成一个可以通过 sy
我正在尝试将包含图像的文件夹嵌入到生成的(使用 PyInstaller)可执行文件中。但这对我不起作用。即使只有一张简单的图片! 我的 main.spec 文件中的 datas 变量如下所示: dat
我正在尝试使用 pyinstaller 打包 cli 应用程序(当前适用于 macos)。我阅读 pyinstaller 文档的最初印象是,当使用 --onefile 选项时,我将能够将所有必需的文件
我正在尝试使用 Pyinstaller 构建单文件 EXE 文件,它包含 Sqlite 数据库文件,它不能与 --onefile 一起使用,但在正常情况下意味着(许多文件)它工作 100%。 我正在做
我正在尝试使用 PyInstaller 2.0 将我的 py 脚本捆绑为 .exe。我可以捆绑脚本,但在我的脚本中,我需要打开一个应该捆绑在 exe 中的文件(因此它是可移植的)。我在执行此操作时遇到
我听到 3 年前的问题,显然有无穷大的解决方案。我想找到这个无限集合中的一个。 问题: 编写程序(只有一个文件示例“selfsource.c”)在 stdout 上打印自己的源代码并退出。 所有技术都
我有一个应用程序,其中有两个可执行文件:Flask-SocketIO-Server 和 CefPython 浏览器。我将这两个可执行文件与 PyInstaller 捆绑在一起。带有 --onefile
我创建了一个 exe 文件,它在某些 Windows 机器上运行良好,但在其他机器上运行失败。 我还找不到失败的原因。 重要数据: x64 可执行程序 Windows 7 python 3.5.1 p
我正在使用 PyInstaller 使用 .spec 文件“编译”一个程序。我正在使用 .spec 文件,因为我需要在程序中包含一个额外的文件。当我尝试执行 PyInstaller --onefile
我已经从 python tkinter GUI 成功创建了一个包含图像的 EXE 文件。请参阅以下代码: lblLogo=Label(main) lblLogo.grid(row=3,column=1
我正在尝试使用 PyInstaller 1.5 编译 PyQt 程序。当我使用 --onedir(默认)时,以下两个程序对我来说都很好,但这会创建相当大的程序。我想使用 --onefile 选项,但是
我已经使用 Pyinstaller 创建了一个 exe 文件。 pyinstaller.exe --onefile --icon='Loco.ico program.py 在该程序中,我在绘图中包含了
我有一个小脚本,它使用 tableau rest api 从 tableau View 下载数据。由于脚本在公司环境中运行,因此我必须使用 SSL。那就是 python-certifi-win32 的
我正在使用 PyInstaller 将我的应用程序捆绑到一个 .exe 文件中。 问题是它可以使用 --onedir 选项正常工作,但是使用 --onefile 构建时找不到模块。 --onedir
我是一名优秀的程序员,十分优秀!