Python 使用py2exe将sqldrivers捆绑到.exe中
在我的第一次尝试中,我与py2exe捆绑的pyQt应用程序拒绝连接到sqlite数据库,尽管它在python版本中工作。 我猜这是因为库没有加载到.exe应用程序中。我通过将sqlite DLL的完整路径包含到Python 使用py2exe将sqldrivers捆绑到.exe中,python,dll,pyqt,py2exe,Python,Dll,Pyqt,Py2exe,在我的第一次尝试中,我与py2exe捆绑的pyQt应用程序拒绝连接到sqlite数据库,尽管它在python版本中工作。 我猜这是因为库没有加载到.exe应用程序中。我通过将sqlite DLL的完整路径包含到setup.py文件中,从而将该DLL复制到可执行文件夹中,解决了这个问题 现在,我想将此DLL包含到.exe文件中,以便向我的用户“隐藏”此DLL你知道怎么做吗? my current setup.py: from distutils.core import setup import p
setup.py
文件中,从而将该DLL复制到可执行文件夹中,解决了这个问题
现在,我想将此DLL包含到.exe文件中,以便向我的用户“隐藏”此DLL你知道怎么做吗?
my current setup.py:
from distutils.core import setup
import py2exe
setup(
windows=[{
"script": 'myscript.py'
}],
options={
'py2exe': {
"dll_excludes": [
"MSVCP90.dll",
"MSWSOCK.dll",
"mswsock.dll",
"powrprof.dll",
],
'includes': [
'sip',
'PyQt4.QtNetwork',
],
'bundle_files': 1,
}
},
data_files = [
'config.ini',
'template.htm',
# This is the File that I wish to be "hidden"
('sqldrivers', ('C:\Python27\Lib\site-packages\PyQt4\plugins\sqldrivers\qsqlite4.dll',)),
zipfile=None,
)
我遇到了同样的问题,而你已经解决了一半。问题的第一部分是您确定的,将文件放入EXE。在我使用pyinstaller时,我不能肯定您的py2exe解决方案的正确性,但这是一般的想法。您需要将qsqlite4.dll放入单个文件应用程序中的sqldrivers目录 第二部分是main.py需要将路径添加到其运行目录中,该目录现在将包含该sqldrivers文件夹。您需要做的是获取main.py正在运行的相对路径,并将该目录设置为QT应用程序中的库路径。我对pyinstaller使用标准的resource_path()函数,但对py2exe使用类似的函数应该可以:
def resource_path(relative_path)
if sys.frozen:
base_path = os.path.dirname(sys.executable)
else:
base_path = os.path.dirname(__file__)
return os.path.join(base_path, relative_path)
然后,您可以在应用程序的主要功能中使用此代码
app = QApplication(sys.argv)
new_lib_path = app.libraryPaths()
new_lib_path.append(resource_path(''))
app.setLibraryPaths(new_lib_path)
. . .
添加日志后,以下是我的app.libraryPaths()之前和之后的内容:
08/25/2014 01:33:24 AM CRITICAL: Before[u'C:/dev/WORKSP~1/db/dist']
08/25/2014 01:33:24 AM CRITICAL: After[u'C:/dev/WORKSP~1/db/dist', u'C:\\Users\\jeff\\AppData\\Local\\Temp\\_MEI2042\\']
您可以将“\”替换为“/”,但我不介意,它仍然可以与windows分隔符一起使用。那么您想只给用户一个可执行文件(没有依赖项)?如果您使用的是Python2.4-2.7,请查看
--onefile
。谢谢,我会看看这个。但是要知道py2exe已经有了我需要的选项(“bundle_files”:1),它通常只生成一个没有依赖关系的可执行文件。这里的问题是,它本身找不到对SQLlight的依赖关系,因此我必须手动添加它,我不知道如何将它强制添加到捆绑包中。