2015-03-13 89 views
1

我想創建一個使用PyInstaller在我的projectPyInstaller不包括依賴文件

該項目使用weasyprint,但是當我運行pyinstaller時,它失敗,因爲weasyprint的資源文件似乎沒有安裝。

Traceback (most recent call last): 
    File "<string>", line 20, in <module> 
    File "<frozen importlib._bootstrap>", line 2214, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 2203, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked 
    File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible 
    File "/usr/local/lib/python3.4/dist-packages/PyInstaller-3.0dev_be553f0-py3.4.egg/PyInstaller/loader/pyi_importers.py", line 302, in load_module 
    exec(bytecode, module.__dict__) 
    File "/usr/local/lib/python3.4/dist-packages/mdedit-1.0.1-py3.4.egg/mdedit/editor/mdeditor.py", line 13, in <module> 
    from mdedit.generator import * 
    File "<frozen importlib._bootstrap>", line 2214, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 2203, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked 
    File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible 
    File "/usr/local/lib/python3.4/dist-packages/PyInstaller-3.0dev_be553f0-py3.4.egg/PyInstaller/loader/pyi_importers.py", line 302, in load_module 
    exec(bytecode, module.__dict__) 
    File "/usr/local/lib/python3.4/dist-packages/mdedit-1.0.1-py3.4.egg/mdedit/generator.py", line 13, in <module> 
    from weasyprint import HTML, CSS 
    File "<frozen importlib._bootstrap>", line 2214, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 2203, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked 
    File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible 
    File "/usr/local/lib/python3.4/dist-packages/PyInstaller-3.0dev_be553f0-py3.4.egg/PyInstaller/loader/pyi_importers.py", line 302, in load_module 
    exec(bytecode, module.__dict__) 
    File "/usr/local/lib/python3.4/dist-packages/weasyprint/__init__.py", line 337, in <module> 
    from .html import find_base_url, HTML5_UA_STYLESHEET, get_html_metadata 
    File "<frozen importlib._bootstrap>", line 2214, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 2203, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked 
    File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible 
    File "/usr/local/lib/python3.4/dist-packages/PyInstaller-3.0dev_be553f0-py3.4.egg/PyInstaller/loader/pyi_importers.py", line 302, in load_module 
    exec(bytecode, module.__dict__) 
    File "/usr/local/lib/python3.4/dist-packages/weasyprint/html.py", line 37, in <module> 
    filename=os.path.join(os.path.dirname(__file__), 'css', 'html5_ua.css')) 
    File "/usr/local/lib/python3.4/dist-packages/weasyprint/__init__.py", line 223, in __init__ 
    with result as (source_type, source, base_url, protocol_encoding): 
    File "/usr/lib/python3.4/contextlib.py", line 59, in __enter__ 
    return next(self.gen) 
    File "/usr/local/lib/python3.4/dist-packages/weasyprint/__init__.py", line 294, in _select_source 
    with open(filename, 'rb') as file_obj: 
FileNotFoundError: [Errno 2] No such file or directory: '/home/sylvain/git/md-edit/dist/MdEditor/weasyprint/css/html5_ua.css' 

有沒有辦法強制pyinstaller包括這個文件?

我應該自己包括它嗎?

命令:pyinstaller mainwindow.spec

mainwindow.spec:

# -*- mode: python -*- 
a = Analysis(['mdedit/mainwindow.py'], 
      pathex=['/home/sylvain/git/md-edit'], 
      hiddenimports=[], 
      hookspath=None, 
      runtime_hooks=None) 
pyz = PYZ(a.pure) 
exe = EXE(pyz, 
      a.scripts, 
      exclude_binaries=True, 
      name='mainwindow', 
      debug=False, 
      strip=None, 
      upx=True, 
      console=True) 
coll = COLLECT(exe, 
       a.binaries, 
       a.zipfiles, 
       a.datas, 
       strip=None, 
       upx=True, 
       name='MdEditor') 

在此先感謝。

回答

1

我有類似的問題,可能是同一個問題,並解決它如下。希望它適用於你:

# -*- mode: python -*- 

from PyInstaller.utils.hooks import collect_data_files 

w = collect_data_files('weasyprint') 
ww = [] 
for k,v in w: 
    ww.append((k, v.split('weasyprint/')[1])) 
added_files += ww 
added_files += collect_data_files('pyphen') 
extra_imports = ['pyphen', 'weasyprint'] 

a = Analysis(['mdedit/mainwindow.py'], 
      pathex=['/home/sylvain/git/md-edit'], 
      datas=added_files, 
      hiddenimports=extra_imports, 
      hiddenimports=[], 
      hookspath=None, 
      runtime_hooks=None) 
pyz = PYZ(a.pure) 
exe = EXE(pyz, 
      a.scripts, 
      exclude_binaries=True, 
      name='mainwindow', 
      debug=False, 
      strip=None, 
      upx=True, 
      console=True) 
coll = COLLECT(exe, 
       a.binaries, 
       a.zipfiles, 
       a.datas, 
       strip=None, 
       upx=True, 
       name='MdEditor')