2013-07-10 1 views
0

Update:Как cxFreeze включает внутренние модули проекта?

Я подозреваю, что это ошибка в cxFreeze, как я понимаю, это должно идти автоматически.

конец обновление

Update:

я пропустил ошибку, данное cxFreeze:

Missing modules: 
? Test.MyClass imported from main__main__ 

конец обновление

Я не уверен, что правильный термин для модулей внутри проект в отличие от sys или PyQt, поэтому я собираюсь с внутренними модулями проекта.

У меня есть пример кода ниже, где я получаю сообщение об ошибке «ImportError: невозможно импортировать имя MyClass». и я хотел бы узнать, как получить cxFreeze для компиляции этого модуля «Test.py».

Вот мой основной код:

Main.py

import sys 
from PyQt5.QtWidgets import QApplication, QMainWindow 
#from guiObjects.MainWindow import MainWindow 
from Test import MyClass 

if __name__ == "__main__": 

    # Initializing the main window 
    app = QApplication(sys.argv) 
    widget = QMainWindow() 
    #mainWindow = MainWindow(widget) 
    test = MyClass() 
    widget.show() 

    sys.exit(app.exec_()) 

Test.py

class MyClass(object): 
    def __init__(self): 
     pass 

__init.py__

'''empty''' 

Setup.py

import sys 
from cx_Freeze import setup, Executable 

path_platforms = ("C:\Python33\Lib\site-packages\PyQt5\plugins\platforms\qwindows.dll", "platforms\qwindows.dll") 

includes = ["re","sip","atexit","PyQt5.QtCore","PyQt5.QtGui"] 
includefiles = [path_platforms] 
excludes = [ 
    '_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger', 
    'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl', 
    'Tkconstants', 'Tkinter' 
] 
packages = ["os"] 
path = [] 

# Dependencies are automatically detected, but it might need fine tuning. 
build_exe_options = { 
        "includes":  includes, 
        "include_files": includefiles, 
        "excludes":  excludes, 
        "packages":  packages, 
        "path":   path 
} 

# GUI applications require a different base on Windows (the default is for a 
# console application). 
base = None 
exe = None 
if sys.platform == "win32": 
    exe = Executable(
     script="../Main.py", 
     initScript = None, 
     base="Win32GUI", 
     targetDir = r"dist", 
     targetName="Main.exe", 
     compress = True, 
     copyDependentFiles = True, 
     appendScriptToExe = False, 
     appendScriptToLibrary = False, 
     icon = None 
    ) 

setup( 
     name = "Main", 
     version = "0.1", 
     author = 'me', 
     description = "My GUI application!", 
     options = {"build_exe": build_exe_options}, 
     executables = [exe] 
) 

ответ

1

Эта проблема возникает при запуске setup.py в подпапках, в которых находится Main.py. Теперь я разместил свой setup.py в той же папке, что и Main.py. и изменил мой файл .bat на python ../setup.py build install.

Это похоже на ошибку в cx_Freeze, поскольку она отлично работает для Python 2.7, но не Python 3.3.

0

Ваш test.py неправильно, вы не можете оставить функции пустой, попробуйте

class MyClass(object): 
    def __init__(self): 
     pass 

и в setup.py mabye добавить "Test" в "включает в себя"

includes = ["re","sip","atexit","PyQt5.QtCore","PyQt5.QtGui", "Test"] 
+0

Я уже пробовал это. Это приводит к пустой тестовой папке, сделанной в Library.zip. Я подозреваю, что правильным результатом должно быть то, что файл Test.py заканчивается как скомпилированный pyc в Main.zip. – Folatt

+1

Есть ли где-то папка 'Test', которую можно найти вместо файла' Test.py'? –

+0

Как насчет того, что вы переименуете 'Test.py' на что-то еще, например' Test1.py' , а затем 'includes = [" re "," sip "," atexit "," PyQt5.QtCore "," PyQt5.QtGui " , "Test1"] ' – Hendry