Как я могу добавить папку Python site-package (которая не включена) в файл PyInstaller spe c? - PullRequest
1 голос
/ 15 января 2020

У меня проблемы с включением пакета python при использовании PyInstaller, особенно docxcompose. Это пакет, который должен импортировать свою папку site-package в каталоге PyInstaller. У меня установлен pip docxcompose, и он находится в моей библиотеке пакетов сайта с папкой, помеченной как docxcompose. import docxcompose явно указан в файле python, на который я ссылаюсь в PyInstaller.

Я выполняю отладку с использованием файла spe c и метода --onedir, так как я хочу со временем установить его с помощью - OneFile. Пока что я добавил их в раздел анализа файла spe c, но не повезло:

hiddenimports=['docxcompose']
pathex=['C:\\Users\\myusername\\AppData\\Local\\Programs\\Python\\Python37\\Lib\\site-packages']

Есть ли причина, по которой docxcompose не добавляется в мой PyInstall? Есть ли способ заставить эту папку копироваться во время установки в противном случае?

1 Ответ

1 голос
/ 15 января 2020

Чтобы «вручную» добавить папку docxcompose вместо того, чтобы полагаться на поиск PyInstaller, я обнаружил, что вам необходимо добавить место назначения папки site-package для docxcompose в разделе «datas» в разделе анализа спецификации c файл. См. Text / spe c file:

sample.spe c

# -*- mode: python ; coding: utf-8 -*-

import sys
from os import path
site_packages = next(p for p in sys.path if 'site-packages' in p)
block_cipher = None


a = Analysis(['ape_proposal_generator.py'],
             pathex=['C:\\Users\\myusername\\AppData\\Local\\Programs\\Python\\Python37\\Lib', 'C:\\MyPythonFileDest'],
             binaries=[],
             datas=[(path.join(site_packages,"docxcompose"),
"docxcompose")],
             hiddenimports=['docxcompose'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='mypythonfilename',
          debug=True,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               upx_exclude=[],
               name='mypythonfilename')
...