2015-09-06 120 views
2

我在Windows上使用64位Python 2.7。当我建立与cx_Freeze的可执行文件,然后运行它,我得到一个错误窗口(,替代真实姓名):cx_Freeze和networkx的问题

--------------------------- 
cx_Freeze: Python error in main script 
--------------------------- 
Traceback (most recent call last): 
    File "C:\Python27\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module> 
    exec(code, m.__dict__) 
    File "ui.py", line 8, in <module> 
    File "C:\Users\<dir_name>\<file_name>.py", line 3, in <module> 
    import networkx as nx 
    File "C:\Python27\lib\site-packages\networkx\__init__.py", line 87, in <module> 
    import networkx.readwrite 
    File "C:\Python27\lib\site-packages\networkx\readwrite\__init__.py", line 14, in <module> 
    from networkx.readwrite.gml import * 
    File "C:\Python27\lib\site-packages\networkx\readwrite\gml.py", line 46, in <module> 
    from lib2to3.refactor import RefactoringTool 
    File "C:\Python27\lib\lib2to3\refactor.py", line 27, in <module> 
    from .fixer_util import find_root 
    File "C:\Python27\lib\lib2to3\fixer_util.py", line 9, in <module> 
    from .pygram import python_symbols as syms 
    File "C:\Python27\lib\lib2to3\pygram.py", line 32, in <module> 
    python_grammar = driver.load_grammar(_GRAMMAR_FILE) 
    File "C:\Python27\lib\lib2to3\pgen2\driver.py", line 121, in load_grammar 
    g = pgen.generate_grammar(gt) 
    File "C:\Python27\lib\lib2to3\pgen2\pgen.py", line 385, in generate_grammar 
    p = ParserGenerator(filename) 
    File "C:\Python27\lib\lib2to3\pgen2\pgen.py", line 15, in __init__ 
    stream = open(filename) 
IOError: [Errno 2] No such file or directory: 'C:\\Users\\<dir_name>\\build\\exe.win-amd64-2.7\\library.zip\\lib2to3\\Grammar.txt' 

--------------------------- 
OK 
--------------------------- 

的文件不在存档,但如果我在构建后手动添加它,它仍未找到。看起来像一条路径(反斜杠?)问题。

有人知道如何解决这个问题吗?

另外:你认为用pyinstaller可以更好地解决这类问题吗?我选择cx_Freeze的原因是pyinstaller本身的安装看起来很平淡,而cx_Freeze是一个单一的whl。

回答

6

我有使用Py2exe相同的问题。

我发现了问题NetworkX版本造成1.10

回滚到1.9.1工作对我来说:

pip uninstall networkx 
pip install networkx==1.9.1 
+0

最简单的解决方案。谢谢! –

3

我不得不面对同样的问题,但不能回滚到networkx 1.9 0.1。

我解决它排除从设置lib2to3,包括回用“includefiles”:

# -*- coding: cp1252 -*- 

import myproj 
from os.path import dirname 
from cx_Freeze import setup, Executable 

gui=Executable(
    script="myproj/gui.py", 
    base="Win32Gui", 
    targetName="myproj.exe", 
    icon="logo.ico", 
    ) 

packages=[] 
includefiles=[] 
includes=[] 
excludes=['tkinter', 'lib2to3'] 

import lib2to3 
lib23_path = dirname(lib2to3.__file__) 
includefiles.append(lib23_path) 

setup(
     name = 'myproj', 
     version = myproj.version, 
     author='myself', 
     license='...', 

     options = {'build_exe': { 
           'packages':packages, 
           'include_files':includefiles, 
           'includes':includes, 
           'excludes':excludes, 
           }}, 
     executables = [gui], 

    )