python修复由py2exe创建的独立exe,包括pyd / dll

时间:2013-03-20 23:54:54

标签: glob loadlibrary

我有一个非常简单的脚本,我用exe将其转换为py2exe格式。然后我将它移动到没有Python的Windows 7机器上。

当我运行它时,我收到以下错误:

  

LoadLibrary(pythondll)失败了   指定的模块无法找到。 C:\ PYTHON27.DLL

我尝试阅读并测试包含dll的一些代码,但没有任何效果。我怎么能包含这个dll?

如果有帮助,我的python脚本只是导入基本的东西

import os 
import getpass
import urllib2
import os
import re
import time

2 个答案:

答案 0 :(得分:0)

您必须将DLL分发到与可执行文件相同的目录中,或者将其放在要运行可执行文件的计算机上的环境PATH中。

答案 1 :(得分:0)

这可能是因为在路径上安装了32位和64位Python。

仔细查看python setup.py py2exe

的输出
. . .
*** copy extensions ***
copying C:\Python27\DLLs\_hashlib.pyd -> C:\path\to\project\dist
copying C:\Python27\DLLs\_socket.pyd -> C:\path\to\project\dist
copying C:\Python27\DLLs\_ssl.pyd -> C:\path\to\project\dist
copying C:\Python27\DLLs\bz2.pyd -> C:\path\to\project\dist
copying C:\Python27\DLLs\select.pyd -> C:\path\to\project\dist
copying C:\Python27\DLLs\unicodedata.pyd -> C:\path\to\project\dist
copying C:\PythonEnvs\some_virtualenv\lib\site-packages\pyodbc-3.0.7-py2.7-win32.egg\pyodbc.pyd -> C:\path\to\project\dist
copying C:\PythonEnvs\some_virtualenv\lib\site-packages\win32\win32print.pyd -> C:\path\to\project\dist
*** copy dlls ***
copying C:\Windows\system32\python27.dll -> C:\path\to\project\dist
setting sys.winver for 'C:\path\to\project\dist\python27.dll' to 'ProjectNameHere'
copying C:\PythonEnvs\some_virtualenv\lib\site-packages\pywin32_system32\pywintypes27.dll -> C:\path\to\project\dist
copying C:\Windows\system32\CRYPT32.dll -> C:\path\to\project\dist
copying C:\PythonEnvs\some_virtualenv\lib\site-packages\py2exe-0.6.9-py2.7-win32.egg\py2exe\run.exe -> C:\path\to\project\dist\mlr_startup.exe

确保py2exe仅从您想要的位置拉出。

在上面的功能示例中,py2exe是从Python 2.7的系统安装C:\Python27引入的。它还从当前的虚拟环境C:\PythonEnvs\some_virtualenv\lib\site-packages拉入。这导致可执行的工作。

当我遇到这个问题时,我发现py2exe也从其他地方引入了一些东西,这些地方有不兼容的Python版本。

例如,我有32位官方Python,然后安装了64位版本的Mercurial。 Mercurial安装了自己的64位版本的Python,而py2exe正在从C:\Python27C:\Program Files\Mercurial\Python27中混合使用32位和64位可执行文件。

要解决它,我刚刚卸载了Mercurial。或者,您可以修改Python路径,以便py2exe不知道Mercurial安装的Python版本,或任何其他不需要的Python安装。