سؤال

everyone,

I wrote a little program using pyPdf for Python 2.7. And it has been tested in Python. Now I want it to be converted to exe file to run it in Windows. Neither py2exe or cx_freeze works out. The exe file does not run.

It looks like it does not contain the pyPdf module in the output folder.

The folder structure is like this:

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

Filing.exe is the program.

I try to run the exe under command window, and the error message is like this:

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

Please help.

Thank you, all!

When I freeze it, the output shows like this:

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>

OK. I checked the pyPdf's location, it is here:

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

How can I bring pyPdf to the exe program then?

هل كانت مفيدة؟

المحلول

Re-posting as an answer:

It seems to be something odd with modules installed inside .egg directories - cx_Freeze apparently isn't seeing setuptools' modifications to the path.

I've filed a cx_Freeze issue about it, but in the meantime, the easy solution is to copy the Python package to somewhere on your PYTHONPATH, like the site-packages folder.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top