在py2exe单EXE文件中使用第三方库

时间:2015-02-23 05:58:37

标签: python dll py2exe autoit

我在Python 2.7.9中制作了一些脚本文件,另外还使用了第三方库 pyautoit 0.4

我想将我的脚本作为单个EXE(想要在单个文件中运行,因此他们不需要设置文件)并使用 py2exe ,尝试这样做:

# -*- coding: utf-8 -*-
from setuptools import setup
import py2exe, sys, os
setup(name = "My Test Application",
      description = "My Test Application for Windows",
      version = "1.01",
      console = [{"script": "myprogram.py"}],
      #data_files - make directory at ./dist, not in exe file
      #data_files=[("./autoit/lib", ["AutoItX3.dll"])],
      options = {
          "py2exe": {
               "includes": ["win32api",,
                            "autoit",
                            "os" ,
                            "time"],
              "bundle_files": 1,
          }
    },
    zipfile = None,
)

它已成功打包在一个EXE文件中,但EXE中没有AutoItX3.dll文件。

我发现py2exe在其EXE文件中不能包含.dll文件,因此在我的主脚本中我尝试手动导入AutoItX3.dll:

# -*- coding: utf-8 -*-
import os, sys
from ctypes import cdll
autoitdll = cdll.LoadLibrary('./modules/AutoItX3.dll')
autoitdll.run("wordpad.exe")

并且无法加载。 (错误信息:

  

Traceback(最近一次调用最后一次):文件   " C:/Users/win7x64kor/PycharmProjects/treesearch_27/myprogram.py" ;, line   26,在       autoitdll.run(" wordpad.exe&#34)

     

文件" C:\ Python27 \ lib \ ctypes__init __。py",第378行, getattr       func = self。 getitem (姓名)

     

文件" C:\ Python27 \ lib \ ctypes__init __。py",第383行, getitem       func = self._FuncPtr((name_or_ordinal,self))

     

AttributeError:function' run'找不到

是否有任何加载库的方法,包括.dll文件?

或者更简单的方法来包含' pyautoit'库函数通过添加一些选项,如py2exe" options>包括:" autoit" "一个EXE文件?

1 个答案:

答案 0 :(得分:0)

如果您不需要将命令行参数传递给您的exe,您可以尝试http://www.py2exe.org/index.cgi/SingleFileExecutable

中建议的步骤

基本思想是使用NSIS(Nullsoft安装系统)将您的exe与所需的dll捆绑在一起。运行exe时,它会将所有内容解压缩到临时文件夹中并执行。关闭时,会自动删除临时文件。