2008-10-21 78 views
9

我的应用程序的其中一个模块使用.pyd文件中的函数。有一个选项可以排除dll(exclude_dlls),但是有一个选项可以包含它们吗?尽管复制了其他文件(.py),但构建过程似乎并未复制模块中的.pyd。我还需要包含一个.dll。如何让py2exe包含.pyd和.dll文件?在py2exe版本中包含PYD/DLL

回答

2

如果没有自动检测到,请尝试手动将它们复制到py2exe的临时构建目录中。它们将被包含在最终的可执行文件中。

+0

是的,但理想情况是应该是setup.py脚本的一部分,或放入我的批处理脚本以创建可执行文件。 – TheObserver 2008-10-21 05:13:08

2

您可以修改设置脚本文件明确复制:

script = "PyInvaders.py"  #name of starting .PY 
project_name = os.path.splitext(os.path.split(script)[1])[0] 
setup(name=project_name, scripts=[script]) #this installs the program 

#also need to hand copy the extra files here 
def installfile(name): 
    dst = os.path.join('dist', project_name) 
    print 'copying', name, '->', dst 
    if os.path.isdir(name): 
    dst = os.path.join(dst, name) 
    if os.path.isdir(dst): 
     shutil.rmtree(dst) 
    shutil.copytree(name, dst) 
    elif os.path.isfile(name): 
    shutil.copy(name, dst) 
    else: 
    print 'Warning, %s not found' % name 

pygamedir = os.path.split(pygame.base.__file__)[0] 
installfile(os.path.join(pygamedir, pygame.font.get_default_font())) 
installfile(os.path.join(pygamedir, 'pygame_icon.bmp')) 
for data in extra_data: 
    installfile(data) 

等...修改,以满足您的需求,当然。

2

也许你可以使用data_files选项设置():

import glob 
setup(name='MyApp', 
     # other options, 
     data_files=[('.', glob.glob('*.dll')), 
        ('.', glob.glob('*.pyd'))], 
    ) 

data_files应该是元组,其中每个元组包含的列表:

  1. 的目标目录。
  2. 要复制的文件列表。

这不会把文件放到library.zip中,这对dll应该不是问题,但我不知道pyd文件。

11

.pyd和.DLL在这里是不同的,因为一个.pyd应该被modulefinder自动发现并包含在内(只要你有相应的“import”语句)而不需要做任何事情。如果有人错过了,你会做同样的事情,就好像一个.py文件错过了(它们都只是模块):使用py2exe选项的“include”选项。

Modulefinder不一定会找到.DLLs(py2exe可以检测到一些)的依赖关系,因此您可能需要使用'data_files'选项明确包含这些。例如,包含两个.DLL('foo.dll'和'bar.dll')以及三个.pyd('module1.pyd','module2.pyd'和'module3')的地方。 pyd')包括:

setup(name='App', 
     # other options, 
     data_files=[('.', 'foo.dll'), ('.', 'bar.dll')], 
     options = {"py2exe" : {"includes" : "module1,module2,module3"}} 
    ) 
+2

在当前版本的py2exe中,data_files应该如下所示: data_files = [(DIR,[FILE,FILE,FILE]),...] – 2010-03-02 20:28:00