相关疑难解决方法(0)

使用PyInstaller捆绑数据文件(--onefile)

我正在尝试使用PyInstaller构建一个单文件EXE,它包含一个图像和一个图标.我无法为我的生活而努力--onefile.

如果我这样做--onedir,一切工作都很顺利.当我使用时--onefile,它找不到引用的附加文件(运行编译的EXE时).它找到了DLL和其他一切都很好,只是不是两个图像.

我查看了运行EXE时生成的temp-dir(\Temp\_MEI95642\例如),文件确实在那里.当我将EXE放入该临时目录时,它会找到它们.非常困惑.

这是我添加到.spec文件中的内容

a.datas += [('images/icon.ico', 'D:\\[workspace]\\App\\src\\images\\icon.ico',  'DATA'),
('images/loaderani.gif','D:\\[workspace]\\App\\src\\images\\loaderani.gif','DATA')]     
Run Code Online (Sandbox Code Playgroud)

我应该补充一点,我也试过不把它们放在子文件夹中,没有什么区别.

编辑: 由于PyInstaller更新,标记的较新答案正确.

python pyinstaller

88
推荐指数
7
解决办法
8万
查看次数

使用Py2Exe的单个可执行文件

我一直在尝试制作一个可执行文件,而我正在接近.请不要建议我使用PyInstaller - 我已经尝试过这条路线,在这里询问,并且已经订购了门票.它很接近但不太合适.我现在正在尝试py2exe,我也非常接近.在pyinstaller中,我能够创建资源文件(使用包含的文件构建可执行文件 - 然后我可以在临时文件夹中访问这些文件).

我想对py2exe做同样的事情.我有一个可执行文件,但有五个额外的文件夹(地图,mpl-data,data,pics和tcl).我已经看到了这个问题,但似乎无法理解它,也无法让它发挥作用.在我的主py文件中,我正在使用PersistentDict(filepath)哪个是我需要文件路径的地方.

我的问题分为两部分:1.如何将文件(下面的数据文件)打包到可执行文件中.2.如何在我的代码中访问这些文件并返回它们的路径(如字符串),例如/temp/file1.jpg.

这是我的py2exe安装文件的代码 - 注意我有matplotlib,必须在我的可执行文件中正确包含mpl-data.谢谢!

from distutils.core import setup 
import py2exe 
import shutil
import glob 
import matplotlib,six

opts = {'py2exe': { "includes" : ["matplotlib.backends",
                                  "matplotlib.backends.backend_qt4agg",
                                  "matplotlib.figure","numpy",
                                  "six",
                                  "mpl_toolkits.basemap", 
                                  "matplotlib.backends.backend_tkagg"], 
                     'excludes': ['_gtkagg', '_tkagg','_agg2','_cairo',
                                  '_cocoaagg', '_fltkagg', '_gtk', '_gtkcairo', 'tcl' ], 
                 'dll_excludes': ['libgdk-win32-2.0-0.dll','w9xpopen.exe', 
                                 'libgobject-2.0-0.dll'],
                    'bundle_files': 1,
                    'dist_dir': "Dist Folder",
                    'compressed': True,
              } 
       }

data_files = [(r'mpl-data', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\*.*')),
              (r'mpl-data', [r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\matplotlibrc']), 
              (r'mpl-data\images',glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\images\*.*')), 
              (r'mpl-data\fonts',glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\fonts\*.*')),
              (r'mpl-data\data', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\data\*.*')),
              ('data', ['C:\\Users\\Me\\Documents\\Example_Json_File.json']),
              ('pics', ['C:\\Users\\Me\\Documents\\Example_Icon.ico',
                        'C:\\Users\\Me\\Documents\\Example_Jpg.jpg',
                        ])]


setup(windows=[{"script" : "MyMainScript.py", …
Run Code Online (Sandbox Code Playgroud)

python executable py2exe matplotlib python-2.7

11
推荐指数
1
解决办法
6495
查看次数

如何使用 pyInstaller 将所有必需的库完全打包?

我已经使用 pyinstaller 创建了我的 python 应用程序的独立应用程序

pyinstaller --windowed app.py
Run Code Online (Sandbox Code Playgroud)

它实际上在我的计算机上运行并按预期工作,但是当我在我朋友的计算机上尝试它时,它不起作用。它运行但不知何故无法处理文本。

这是使用的库:

import tkinter as Tk
import tkinter.ttk as ttk
import tkinter.scrolledtext as ScrollTxt
from tkinter import END,E,W,filedialog,messagebox
from nltk.tokenize import sent_tokenize, RegexpTokenizer, word_tokenize
import math
import fileinput
from textblob import TextBlob as tb
from nltk.tag import pos_tag, map_tag
from nltk.corpus import stopwords
Run Code Online (Sandbox Code Playgroud)

如果要查看结果文件:https : //www.dropbox.com/s/mfdnaaoik7w0r23/TextSummaryV73.rar?dl=0

有人知道出了什么问题或缺少什么吗?

我认为它是 nltk 或 textblob,有人可以帮助如何将这些文件添加到包中吗?

编辑:我已使用规范文件将 nltk 和 textblob 添加到 Python 应用程序的目录中。现在的问题是,如何让程序知道这两个导入已经在目录中了?

pyinstaller python-3.x

6
推荐指数
1
解决办法
1万
查看次数

PyDrive client_secrets来自其他目录

我正在使用PyDrive从我正在使用Pyinstaller打包的桌面Python应用程序将文件上传到GoogleDrive.我想尽可能地隐藏client_secrets.json,所以我使用这个解决方案它嵌入到Pyinstaller .exe文件中:使用PyInstaller 2.1和MEIPASS错误捆绑数据文件--onefile

然而,PyDrive没有从Pyinstaller放置数据文件的临时目录中找到client_secrets文件.

如何让PyDrive从另一个目录中读取json文件,尤其是AppData?我在考虑将文件从临时目录移动到工作目录,然后再进行身份验证和删除,但是有些用户没有管理员权限,无法修改程序文件(应用程序的安装位置)

我看到我可以使用我可以引用另一个目录的settings.yaml文件,但是pyinstaller似乎使用sys._MEIPASS变量将嵌入式client_secrets.json放在temp文件夹中,所以我不知道它会在哪里.

我必须直接将这个有价值的内容传递给GoogleAuth(),有没有办法做到这一点?

python pyinstaller pydrive

1
推荐指数
1
解决办法
1296
查看次数