【问题标题】:pyPdf for Python 2.7 does not work with py2exe and cx_freeze?Python 2.7 的 pyPdf 不适用于 py2exe 和 cx_freeze?
【发布时间】:2013-04-02 23:32:56
【问题描述】:

大家,

我使用 pyPdf 为 Python 2.7 编写了一个小程序。它已经在 Python 中进行了测试。现在我希望将它转换为 exe 文件以在 Windows 中运行它。 py2exe 或 cx_freeze 都不起作用。 exe文件不运行。

看起来它在输出文件夹中不包含 pyPdf 模块。

文件夹结构是这样的:

dist\
    tcl [folder]
    tk [folder]
    _ctypes.pyd
    _tkinter.pyd
    bz2.pyd
    Filing.exe
    python27.dll
    tcl85.dll
    tk85.dll
    unicodedata.pyd

Filing.exe 是程序。

我尝试在命令窗口下运行exe,错误信息是这样的:

Traceback (most recent call last):
 File "C:\python27\lib\site-packages\cx_Freeze\initscripts\console.py", line 27, in <module>
    exec code in m.__dict__
 File "filing.py", line 1, in <module>
ImportError: No module named pyPdf

请帮忙。

谢谢大家!

当我冻结它时,输出显示如下:

C:\Python27\Scripts>cxfreeze pypdf_test.py
copying C:\Python27\lib\site-packages\cx_Freeze\bases\Console.exe -> C:\Python27
\Scripts\dist\pypdf_test.exe
copying C:\Windows\system32\python27.dll -> C:\Python27\Scripts\dist\python27.dl
l
writing zip file C:\Python27\Scripts\dist\pypdf_test.exe

  Name                      File
  ----                      ----
m StringIO
m UserDict
m __builtin__
m __main__                  pypdf_test.py
m _abcoll
m _codecs
m _codecs_cn
m _codecs_hk
m _codecs_iso2022
m _codecs_jp
m _codecs_kr
m _codecs_tw
m _multibytecodec
m _struct
m _warnings
m _weakref
m _weakrefset
m abc
m base64
m binascii
m bz2                       C:\Python27\DLLs\bz2.pyd
m codecs
m copy
m copy_reg
m cx_Freeze__init__         C:\Python27\lib\site-packages\cx_Freeze\initscripts\
Console.py
P encodings
m encodings.aliases
m encodings.ascii
m encodings.base64_codec
m encodings.big5
m encodings.big5hkscs
m encodings.bz2_codec
m encodings.charmap
m encodings.cp037
m encodings.cp1006
m encodings.cp1026
m encodings.cp1140
m encodings.cp1250
m encodings.cp1251
m encodings.cp1252
m encodings.cp1253
m encodings.cp1254
m encodings.cp1255
m encodings.cp1256
m encodings.cp1257
m encodings.cp1258
m encodings.cp424
m encodings.cp437
m encodings.cp500
m encodings.cp720
m encodings.cp737
m encodings.cp775
m encodings.cp850
m encodings.cp852
m encodings.cp855
m encodings.cp856
m encodings.cp857
m encodings.cp858
m encodings.cp860
m encodings.cp861
m encodings.cp862
m encodings.cp863
m encodings.cp864
m encodings.cp865
m encodings.cp866
m encodings.cp869
m encodings.cp874
m encodings.cp875
m encodings.cp932
m encodings.cp949
m encodings.cp950
m encodings.euc_jis_2004
m encodings.euc_jisx0213
m encodings.euc_jp
m encodings.euc_kr
m encodings.gb18030
m encodings.gb2312
m encodings.gbk
m encodings.hex_codec
m encodings.hp_roman8
m encodings.hz
m encodings.idna
m encodings.iso2022_jp
m encodings.iso2022_jp_1
m encodings.iso2022_jp_2
m encodings.iso2022_jp_2004
m encodings.iso2022_jp_3
m encodings.iso2022_jp_ext
m encodings.iso2022_kr
m encodings.iso8859_1
m encodings.iso8859_10
m encodings.iso8859_11
m encodings.iso8859_13
m encodings.iso8859_14
m encodings.iso8859_15
m encodings.iso8859_16
m encodings.iso8859_2
m encodings.iso8859_3
m encodings.iso8859_4
m encodings.iso8859_5
m encodings.iso8859_6
m encodings.iso8859_7
m encodings.iso8859_8
m encodings.iso8859_9
m encodings.johab
m encodings.koi8_r
m encodings.koi8_u
m encodings.latin_1
m encodings.mac_arabic
m encodings.mac_centeuro
m encodings.mac_croatian
m encodings.mac_cyrillic
m encodings.mac_farsi
m encodings.mac_greek
m encodings.mac_iceland
m encodings.mac_latin2
m encodings.mac_roman
m encodings.mac_romanian
m encodings.mac_turkish
m encodings.mbcs
m encodings.palmos
m encodings.ptcp154
m encodings.punycode
m encodings.quopri_codec
m encodings.raw_unicode_escape
m encodings.rot_13
m encodings.shift_jis
m encodings.shift_jis_2004
m encodings.shift_jisx0213
m encodings.string_escape
m encodings.tis_620
m encodings.undefined
m encodings.unicode_escape
m encodings.unicode_internal
m encodings.utf_16
m encodings.utf_16_be
m encodings.utf_16_le
m encodings.utf_32
m encodings.utf_32_be
m encodings.utf_32_le
m encodings.utf_7
m encodings.utf_8
m encodings.utf_8_sig
m encodings.uu_codec
m encodings.zlib_codec
m errno
m exceptions
m genericpath
m imp
m itertools
m linecache
m nt
m ntpath
m os
m posixpath
m quopri
m repr
m stat
m string
m stringprep
m strop
m struct
m sys
m traceback
m types
m unicodedata               C:\Python27\DLLs\unicodedata.pyd
m warnings
m weakref
m zipimport
m zlib

Missing modules:
? pyPdf imported from __main__

copying C:\Python27\DLLs\bz2.pyd -> C:\Python27\Scripts\dist\bz2.pyd
copying C:\Python27\DLLs\unicodedata.pyd -> C:\Python27\Scripts\dist\unicodedata
.pyd

C:\Python27\Scripts>

好的。我检查了 pyPdf 的位置,就在这里:

>>import pyPdf
>>print pyPdf
module 'pyPdf' from 'C:\Python27\lib\site-packages\pypdf-1.13-py2.7.egg\pyPdf\__init__.pyc'

那我怎样才能把 pyPdf 带入 exe 程序呢?

【问题讨论】:

  • pyPdf 是纯 Python,所以 cx_Freeze 会打包成一个 zip 文件(py2exe 大概类似,但我不太了解)。您可以发布冻结时显示的输出吗?
  • 输出显示它没有找到pyPdf(请参阅“缺少模块”)。 pyPdf 在哪里?要检查,启动 Python,然后执行 import pyPdf; print pyPdf
  • 可能是鸡蛋出了问题 - setuptools 做了一些奇怪的事情。尝试将 pyPdf 目录上一层复制到站点包中。
  • 哇,好用!谢谢!!!你应该把它作为这个问题的答案。

标签: python-2.7 py2exe cx-freeze pypdf


【解决方案1】:

重新发布作为答案:

安装在 .egg 目录中的模块似乎有些奇怪 - cx_Freeze 显然没有看到 setuptools 对路径的修改。

我已经 filed a cx_Freeze issue 关于它,但与此同时,简单的解决方案是将 Python 包复制到 PYTHONPATH 上的某个位置,例如 site-packages 文件夹。

【讨论】:

    猜你喜欢
    • 2017-07-24
    • 1970-01-01
    • 2012-01-13
    • 2017-02-22
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    相关资源
    最近更新 更多