1

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

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

LoadLibrary(pythondll) failed
找不到指定的模块。C:\PYTHON27.DLL

我试图阅读和测试一些包含 dll 的代码,但没有任何效果。我怎样才能包含这个dll?

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

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

2 回答 2

0

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

于 2013-03-21T00:31:19.617 回答
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,而 py2exeC:\Python27C:\Program Files\Mercurial\Python27.

为了解决这个问题,我刚刚卸载了 Mercurial。或者,您可以修改 Python 路径,以便 py2exe 不知道安装 Mercurial 的 Python 版本或任何其他不受欢迎的 Python 安装。

于 2015-02-06T17:36:06.857 回答