2012-04-18 37 views
5

Tôi đang cố gắng sử dụng cx-freeze để tạo phân phối tĩnh độc lập cho ứng dụng của tôi (Công cụ Python Spye, www.spye.dk), tuy nhiên, khi tôi chạy cx-freeze , nó nói:cx-freeze không bao gồm mô-đun ngay cả khi được bao gồm cụ thể

Missing modules: 
? _md5 imported from hashlib 
? _scproxy imported from urllib 
? _sha imported from hashlib 
? _sha256 imported from hashlib 
? _sha512 imported from hashlib 
? _subprocess imported from subprocess 
? configparser imported from apport.fileutils 
? usercustomize imported from site 

Đây là setup.py của tôi:

#!/usr/bin/env python 
from cx_Freeze import setup, Executable 

includes = ["hashlib", "urllib", "subprocess", "fileutils", "site"] 
includes += ["BaseHTTPServer", "cgi", "cgitb", "fcntl", "getopt", "httplib", "inspect", "json", "math", "operator", "os", "os,", "psycopg2", "re", "smtplib", "socket", "SocketServer", "spye", "spye.config", "spye.config.file", "spye.config.merge", "spye.config.section", "spye.editor", "spye.framework", "spye.frontend", "spye.frontend.cgi", "spye.frontend.http", "spye.input", "spye.output", "spye.output.console", "spye.output.stdout", "spye.pluginsystem", "spye.presentation", "spye.util.html", "spye.util.rpc", "ssl", "stat,", "struct", "subprocess", "sys", "termios", "time", "traceback", "tty", "urllib2", "urlparse", "uuid"] 

includefiles=[] 
excludes = [] 
packages = [] 
target = Executable(
    # what to build 
    script = "spye-exe", 
    initScript = None, 
    #base = 'Win32GUI', 
    targetDir = r"dist", 
    targetName = "spye.exe", 
    compress = True, 
    copyDependentFiles = True, 
    appendScriptToExe = False, 
    appendScriptToLibrary = False, 
    icon = None 
    ) 

setup(
    version = "0.1", 
    description = "No Description", 
    author = "No Author", 
    name = "cx_Freeze Sample File", 

    options = {"build_exe": {"includes": includes, 
       "excludes": excludes, 
       "packages": packages 
       #"path": path 
       } 
      }, 

    executables = [target] 
    ) 

Xin lưu ý rằng tôi chỉ định rõ ràng các module thiếu trong danh sách bao gồm.

Làm cách nào để khắc phục sự cố này?

Trả lời

-1

Tôi đoán, bạn không thể chỉ đơn giản là += trên danh sách.

Bạn có lẽ nên sử dụng phương pháp danh sách extend - nếu không danh sách ban đầu sẽ không được sửa đổi:

includes.extend(["BaseHTTPServer", "<rest of your modules>"]) 

EDIT: (Cảm ơn @ThomasK)

+= hoạt động tốt - Tôi chỉ có một Trình thông dịch Python trực tuyến không hoạt động chính xác. (Tôi không có python cài đặt trên cài đặt Windows của tôi vì vậy tôi đã phải kiểm tra trực tuyến).

+0

Phải, tôi đã khắc phục điều đó, nhưng tôi vẫn nhận được cùng một danh sách các mô-đun bị thiếu. Làm thế nào để khắc phục? – ervingsb

+0

Tôi đã cập nhật setup.py của mình tại đây: http://paste.adora.dk/P2357.txt và đầu ra từ "python setup.py build | grep -A12 Thiếu" ở đây: http: //paste.adora .dk/P2356.txt – ervingsb

+0

Tôi vừa giải quyết được vấn đề của bạn và có vẻ như tương quan với [libcrypto] (http://www.mail-archive.com/[email protected]/msg00664.html) (Tuy nhiên không có giải pháp) - có thể cx_freeze không xử lý phụ thuộc không python? – BergmannF

0

Mô-đun bị thiếu không nhất thiết là vấn đề: nhiều mô-đun thử các lần nhập khác nhau để chứa các nền tảng khác nhau hoặc các phiên bản Python khác nhau. Trong subprocess, ví dụ, bạn có thể tìm thấy mã này:

if mswindows: 
    ... 
    import _subprocess 

cx_Freeze không biết về điều này, vì vậy nó sẽ cố gắng tìm _subprocess trên Linux/Mac là tốt, và báo cáo nó như là mất tích. Chỉ định chúng trong includes không thay đổi bất cứ điều gì, bởi vì nó đang cố gắng bao gồm chúng, nhưng không thể tìm thấy chúng.

Bạn nên tạo tệp, vì vậy hãy thử chạy tệp đó và xem nó có hoạt động hay không.

Các vấn đề liên quan