2015-08-25 1 views
1

TLDR: Мой скрипт python, который мой rails-приложение на fireku-fire запускает сбой из-за документа импорта документов docx из-за некоторой зависимости от unicode/lxml ,Проблемы с получением python-docx, работающим с скриптом Python, выполняемым приложением Rails, размещенным на Heroku

2015-08-25T22:09:35.561165+00:00 app[web.1]: Traceback (most recent call last): 
    2015-08-25T22:09:35.561172+00:00 app[web.1]: File "individual_insights_survey_report.py", line 4, in <module> 
    2015-08-25T22:09:35.561181+00:00 app[web.1]:  from docx import Document 
    2015-08-25T22:09:35.561222+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/docx/__init__.py", line 3, in <module> 
    2015-08-25T22:09:35.561254+00:00 app[web.1]:  from docx.api import Document # noqa 
    2015-08-25T22:09:35.561277+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/docx/api.py", line 14, in <module> 
    2015-08-25T22:09:35.561312+00:00 app[web.1]:  from docx.package import Package 
    2015-08-25T22:09:35.561336+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/docx/package.py", line 11, in <module> 
    2015-08-25T22:09:35.561369+00:00 app[web.1]:  from docx.opc.package import OpcPackage 
    2015-08-25T22:09:35.561391+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/docx/opc/package.py", line 12, in <module> 
    2015-08-25T22:09:35.561421+00:00 app[web.1]:  from .part import PartFactory 
    2015-08-25T22:09:35.561443+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/docx/opc/part.py", line 12, in <module> 
    2015-08-25T22:09:35.561473+00:00 app[web.1]:  from .oxml import serialize_part_xml 
    2015-08-25T22:09:35.561495+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/docx/opc/oxml.py", line 12, in <module> 
    2015-08-25T22:09:35.561533+00:00 app[web.1]:  from lxml import etree 
    2015-08-25T22:09:35.561628+00:00 app[web.1]: ImportError: /app/.heroku/python/lib/python2.7/site-packages/lxml/etree.so: undefined symbol: PyUnicodeUCS2_DecodeLatin1 

Я думал, что это может быть версия, но, похоже, не может найти версии, которые будут работать так же, как и локально. Это, вероятно, вещь Python + Heroku, так как я впервые пытаюсь использовать любой тип Python на Heroku.

В частности, я нашел это mailgroup post, который упоминает:

lxml can support either UCS4 or UCS2 as the internal Unicode representation, but the switch is made at compile-time.

Make sure that the Python that compiled etree.so and the Python that uses it are the same. Same version (at least minor as in 2.7.x, maybe micro as in 2.7.3), same architecture, and in this case same Unicode settings (UCS4 vs UCS2.)

The easiest way to do this is to re-install lxml from the source tarball. Do you still have this issue?"

Так что я попытался выяснить, какая версия Python была использована (не удалось), а затем попытался указать различные версии на runtime.txt, чтобы попытаться заставить его работать ,

Caveat: here's a lot of pieces in the chain and I'm not very familiar with most of them -- so if I need to provide more information to give context -- please let me know!

Полный контекст: Моя компания имеет Ruby On Rails Webapp, что в основном это платформа самообслуживания для генерации отчетов данных для нашей команды клиента доставки.

Приложение Rails при нажатии кнопки должно запускать скрипт Python, который открывает электронную таблицу Excel (openpyxl) и выполняет некоторый анализ данных на нем, а затем выводит отчет в Microsoft Word (python-docx), который загружается в zip-файле.

Это, безусловно, субоптимальный/чрезмерно сложный способ сделать это, но я унаследовал Webapp и сейчас просто пытаюсь работать в его структуре.

У меня есть сценарий Python работает нормально при запуске локально и стоять в одиночку (без рельсов/рубин/Heroku) с:

Python ver: 2.7.5 
openpyxl==2.2.5 
python-docx==0.8.5 

Я пробовал приложение Heroku с: версии Python: 2.7.3 , 2.7.5, 2.7.9, 2.7.10 с ошибкой выше. Это с requirements.txt выглядит как:

python-docx==0.8.5 
openpyxl==2.2.5 
lxml==3.4.4 

Добавлено LXML быть безопасным.

Когда я использую версии Python: 3.2.5, 3.3.3

Где я получаю эту ошибку:

2015-08-25T23:38:59.793177+00:00 app[web.1]: ImportError: No module named site 

Любая помощь о том, как решить эту проблему было бы здорово! Нужно ли переустанавливать Python или модуль? Это даже выполнимо на Хереку? Я пропущу зависимость? Конфигурация? Помощь :)

ответ

0

Оказывается, это была моя собственная глупость - в основном я использую «питон», чтобы запустить сценарий питона, который сгенерировал бесполезный «ImportError: Нет модуль с именем сайта» вместо «Python3»

Switched и все было в порядке! Поэтому, если вы получите эту ошибку, возможно, это произойдет, p

Смежные вопросы