使用cx_freeze进行编译不会生成预期的文件

时间:2014-08-07 15:19:17

标签: python

首先,我必须说谢谢!这个网站和这里提出的问题是一个很好的信息来源。

原谅我的英语,我不习惯写作和/或表达长篇小说。

好吧,现在我暴露了我的麻烦:我正在编写一个处理矩阵的python程序,用户输入组装它们所需的一些数据并执行一些矩阵操作。在计算结束时,程序必须在.txt文件中写入计算结果。必须说当我在python的shell中运行程序时,一切都正常工作。

现在,因为我想独立分发这个程序(换句话说,程序在不调用python的shell的情况下运行),我转移到W7并安装了cx_Freeze以及所需的所有东西。运行编译命令并且不会出错。运行程序并且没有错误(我认为)但是没有创建.txt文件!

我在主程序中显示一段代码(变量名是西班牙语),用于处理文件写入:

...
reporte = open(r'reporte_%s.txt' % g_fecha, 'w')
reporte.write('+' + '-'*39 + '+\n')
reporte.write('|' + ' '*10 + 'PROGRAMA CERCHAS 2D' + ' '*10 + '|\n')
reporte.write('|' + ' '*39 + '|\n')
reporte.write('|' + ' '*7 + 'Software didáctico para ' + ' '*8 + '|\n')
reporte.write('|' + ' '*3 + 'análisis de cerchas estáticamente' + ' '*3 + '|\n')
reporte.write('|' + ' '*5 + 'determinadas e indeterminadas' + ' '*5 + '|\n')
reporte.write('|' + ' '*39 + '|\n')
reporte.write('|' + ' '*14 + 'versión 1.0' + ' '*14 + '|\n')
reporte.write('|' + ' '*5 + 'Desarrollado por: Felipe Pérez' + ' '*4 + '|\n')
reporte.write('|' + ' '*3 + 'Tesis de grado de Ingeniería Civil' + ' ' *2 + '|\n')
reporte.write('+' + '-'*39 + '+\n\n')

reporte.write('1) Matriz de continuidad global: mcg\n')
with reporte as salida:
    pprint(mcg, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n2) Matriz de continuidad efectiva: mcn\n')
with reporte as salida:
    pprint(mcn, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n3) Matriz de continuidad de apoyos: mca\n')
with reporte as salida:
    pprint(mca, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n4) Matriz de rigidez de los elementos: ke\n')
with reporte as salida:
    pprint(ke, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n5) Matriz de rigidez efectiva: k_ef = (mcn)t*ke*mcn\n')
with reporte as salida:
    pprint(k_ef, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n6) Vector de fuerzas globales: F_gl\n')
with reporte as salida:
    pprint(frz_gb, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n7) Vector de fuerzas efectivas: F_ext\n')
with reporte as salida:
    pprint(frz_ef, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n8) Vector de desplazamientos: u = inversa(k_ef)*F_ext\n')
with reporte as salida:
    pprint(u, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n9) Vector de fuerzas en barras: F_bar = ke*mcn*u\n')
with reporte as salida:
    pprint(f_bar, stream = salida)
reporte = open(r'reporte_%s.txt' % g_fecha, 'a')
reporte.write('\n10) Vector de reacciones en los apoyos: Reac = (mca)t*F_bar\n')
with reporte as salida:
    pprint(reac, stream = salida)
reporte.close()

现在我显示整个setup.py文件代码:

import sys
from cx_Freeze import setup, Executable

includes = ['PyQt4.QtCore', 'PyQt4.QtGui', 'sip',     'pyqtgraph.graphicsItems','numpy','datetime','pprint'"atexit"]
excludes = ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger',"cvxopt",
'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl','tables',
'Tkconstants', 'Tkinter', 'zmq','PySide','pysideuic','scipy','matplotlib']

if sys.version[0] == '2':
# causes syntax error on py2
    excludes.append('PyQt4.uic.port_v3')

base = None
if sys.platform == "win32":
    base = "Win32GUI"

build_exe_options = {"excludes": excludes,
    "includes":includes,"include_msvcr":True,
    'compressed':True,'copy_dependent_files':True,'create_shared_zip':True,
    'include_in_shared_zip':True,'optimize':2}

setup( name = "Test Software",
    version = "0.1",
    description = "Proyecto de tesis Felipe Perez",
    options = {"build_exe": build_exe_options},
    executables = [Executable("maincerchas.py", base=base)])

我认为问题可能是一个缺失的模块,您的想法是什么?

感谢阅读和快乐编码!

3 个答案:

答案 0 :(得分:1)

尝试使用绝对路径

  

reporte = open(r' D:\ ... \ reporte_%s.txt'%g_fecha,' w')

答案 1 :(得分:1)

首先,我要感谢快速反应。它为我的项目提供了一些帮助。

思考几分钟后,我决定在W7上运行程序(我在CAELinux,GREAT发行版上开发了它)和VOILA!出现错误:

Traceback (most recent call last):
    File "maincerchas.py", line 300, in acc_ejecutar
        reporte = open(r'reporte_%s.txt' % g_fecha, 'w')
IOError: [Errno  22] invalid mode ('w') or filename: 'reporte_2014-08-07 18:36:37.9470000.txt'

现在我要挖掘这个错误,并最终发布解决方案。

谢谢你,编码愉快!

答案 2 :(得分:1)

毕竟,似乎所有麻烦都是由Windows保留字符造成的(我试图使用冒号":"这是Windows上的保留字符)

我刚刚将这一行添加到我的代码中并且运行完美

g_fecha = g_fecha.replace(':', '_')

希望它会有所帮助。快乐的编码!