python setup.py py2exe Invalid Syntax (asyncsupport.py, line 22) [英] python setup.py py2exe Invalid Syntax (asyncsupport.py, line 22)

查看:58
本文介绍了python setup.py py2exe Invalid Syntax (asyncsupport.py, line 22)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此命令在我的个人计算机上运行良好,但在我的工作 PC 上一直给我这个错误.会发生什么?我可以毫无问题地直接在 Powershell 中运行 Char_Limits.py 脚本.错误:编译C:\ProgramData\Anaconda2\lib\site-packages\jinja2\asyncsupport.py"失败语法错误:语法无效(asyncsupport.py,第 22 行)

This command works fine on my personal computer but keeps giving me this error on my work PC. What could be going on? I can run the Char_Limits.py script directly in Powershell without a problem. error: compiling 'C:\ProgramData\Anaconda2\lib\site-packages\jinja2\asyncsupport.py' failed SyntaxError: invalid syntax (asyncsupport.py, line 22)

我的 setup.py 文件如下所示:

from distutils.core import setup
import py2exe

setup (console=['Char_Limits.py'])

我的文件看起来像:

import xlwings as xw
from win32com.client import constants as c
import win32api

""" 
Important Notes: Header row has to be the first row. No columns without a header row. If you need/want a blank column, just place a random placeholder
header value in the first row.
Product_Article_Number column is used to determine the number of rows. It must be populated for every row.
"""

#functions, hooray!
def setRange(columnDict, columnHeader):
    column = columnDict[columnHeader]
    rngForFormatting = xw.Range((2,column), (bttm, column))
    cellReference = xw.Range((2,column)).get_address(False, False)
    return rngForFormatting, cellReference

def msg_box(message):
    win32api.MessageBox(wb.app.hwnd, message)   

#Character limits for fields in Hybris
CharLimits_Fields = {"alerts":500, "certifications":255, "productTitle":300,
        "teaserText":450 , "includes":1000, "compliance":255, "disclaimers":9000, 
        "ecommDescription100":100, "ecommDescription240":240, 
        "internalKeyword":1000, "metaKeywords":1000, "metaDescription":1000,
        "productFeatures":7500, "productLongDescription":1500,"requires":500,
        "servicePlan":255, "skuDifferentiatorText":255, "storage":255, 
        "techDetailsAndRefs":12000, "warranty":1000}

# Fields for which a break tag is problematic.  
BreakTagNotAllowed = ["ecommDescription100", "ecommDescription240", "productTitle", 
                        "skuDifferentiatorText"]    

app = xw.apps.active                        
wb = xw.Book(r'C:\Users\XXXX\Documents\Import File.xlsx')

#identifies the blanket range of interest
firstCell = xw.Range('A1')
lstcolumn = firstCell.end("right").column

headers_Row = xw.Range((1,1), (1, lstcolumn)).value
columnDict = {}

for column in range(1, len(headers_Row) + 1):
    header = headers_Row[column - 1]
    columnDict[header] = column


try:
    articleColumn = columnDict["Product_Article_Number"]

except: 
    articleColumn = columnDict["Family_Article_Number"]

firstCell = xw.Range((1,articleColumn))

bttm = firstCell.end("down").row

wholeRange = xw.Range((1,1),(bttm, lstcolumn))
wholeRangeVal = wholeRange.value

#Sets the font and deletes previous conditional formatting
wholeRange.api.Font.Name = "Arial Unicode MS"
wholeRange.api.FormatConditions.Delete()

for columnHeader in columnDict.keys():
    if columnHeader in CharLimits_Fields.keys():
        rng, cellRef = setRange(columnDict, columnHeader)
        rng.api.FormatConditions.Add(2,3, "=len(" + cellRef + ") >=" + str(CharLimits_Fields[columnHeader]))
        rng.api.FormatConditions(1).Interior.ColorIndex = 3

    if columnHeader in BreakTagNotAllowed:
        rng, cellRef = setRange(columnDict, columnHeader)
        rng.api.FormatConditions.Add(2,3, '=OR(ISNUMBER(SEARCH("<br>",' + cellRef + ')), ISNUMBER(SEARCH("<br/>",' + cellRef + ")))")
        rng.api.FormatConditions(2).Interior.ColorIndex = 6

searchResults = wholeRange.api.Find("~\"")
if searchResults is not None:
    msg_box("There's a double quote in this spreadsheet")
else:
    msg_box("There are no double quotes in this spreadsheet")

# app.api.FindFormat.Clear
# app.api.FindFormat.Interior.ColorIndex = 3
# foundRed = wholeRange.api.Find("*", SearchFormat=True)

# if foundRed is None:
    # msg_box("There are no values exceeding character limits")
# else:
    # msg_box("There are values exceeding character limits")

# app.api.FindFormat.Clear
# app.api.FindFormat.Interior.ColorIndex = 6
# foundYellow = wholeRange.api.Find("*", SearchFormat=True)
# if foundYellow is None:
    # msg_box("There are no break tags in this spreadsheet")
# else:
    # msg_box("There are break tags in this spreadsheet")

推荐答案

注意:

如果您正在阅读本文,我会先尝试 Santiago 的解决方案.

If you are reading this, I would try Santiago's solution first.

问题:

查看 github 包的第 22 行可能的内容:

async def concat_async(async_gen):

这是利用了在 python 3.5 中添加的 async 关键字,但是 py2exe 最多只支持 python 3.4.现在 jinja 看起来正在以某种方式扩展 python 语言(也许在运行时?)以在早期版本的 python 中支持这个 async 关键字.py2exe 无法解释此语言扩展.

This is making use of the async keyword which was added in python 3.5, however py2exe only supports up to python 3.4. Now jinja looks to be extending the python language in some way (perhaps during runtime?) to support this async keyword in earlier versions of python. py2exe cannot account for this language extension.

修复:

根据文档

async support was added in jinja2 version 2.9 according to the documentation. So I tried installing an earlier version of jinja (version 2.8) which I downloaded here.

我通过将 %PYTHONHOME%\Lib\site-packages\jinja2 的内容移动到其他地方来备份我当前的 jinja 安装.解压之前下载的 tar.gz 文件并通过 pip 安装包:

I made a backup of my current jinja installation by moving the contents of %PYTHONHOME%\Lib\site-packages\jinja2 to some other place. extract the previously downloaded tar.gz file and install the package via pip:

cd .\Downloads\dist\Jinja2-2.8 # or wherever you extracted jinja2.8
python setup.py install

作为旁注,我还必须增加递归限制,因为 py2exe 已达到默认限制.

As a side note, I also had to increase my recursion limit because py2exe was reaching the default limit.

from distutils.core import setup
import py2exe
import sys
sys.setrecursionlimit(5000)
setup (console=['test.py'])

警告:

如果您使用的任何东西都依赖于最新版本的 jinja2,那么在实际运行您的代码时,这可能会失败或产生意外的副作用.我正在编译一个非常简单的脚本.

If whatever it is you are using relies on the latest version of jinja2, then this might fail or have unintended side effects when actually running your code. I was compiling a very simple script.

这篇关于python setup.py py2exe Invalid Syntax (asyncsupport.py, line 22)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆