TLDR:我的python脚本--我在heroku上的rails应用程序--由于某些unicode/lxml依赖关系而在“从docx导入文档”失败。
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的问题,因为这是我第一次尝试在Heroku上使用任何Python。
具体来说,我找到了这个邮件组邮寄,它提到:
lxml可以支持UCS4或UCS2作为内部Unicode表示形式,但切换是在编译时完成的。 确保编译etree.so的Python和使用它的Python是相同的。相同的版本(至少是2.7.x中的小版本,可能是2.7.3中的微版本),相同的体系结构,以及在本例中相同的Unicode设置(UCS4 vs UCS2)。 最简单的方法是从源tarball重新安装lxml。你还有这个问题吗?“
因此,我试图找出使用了哪种版本的Python (失败),然后尝试在runtime.txt中指定不同的版本,以尝试使其工作。
警告:链上有很多片段,我不太熟悉其中的大多数--所以如果我需要提供更多的信息来给出上下文--请告诉我!
全文:我的公司有一个Rails应用程序,它基本上是一个为我们的客户交付团队生成数据报告的自助服务平台。
通过单击按钮,Rails应用程序应该会触发Python脚本,该脚本打开Excel电子表格(openpyxl),并在上面运行一些数据分析,然后将报告输出到Microsoft (Python)文档中,该文档将在zip文件中下载。
这无疑是一种次优/过于复杂的方法,但我继承了Webapp,目前只是尝试在它的结构中工作。
我的Python脚本在本地运行时运行良好,并且独立运行(没有rails/ruby/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还是模块?那在Heroku上也可以吗?我失去了依赖吗?配置方面的问题?(帮助:)
发布于 2015-11-30 16:46:15
原来这是我自己的愚蠢--基本上是我用"python“来触发python脚本,它生成了无用的"ImportError: No模块名站点”,而不是"python3“。
调换了,一切都很好!所以,如果你得到了那个错误,那可能就是发生了什么;p
https://stackoverflow.com/questions/32215851
复制相似问题