2008-10-21 68 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