代码之家  ›  专栏  ›  技术社区  ›  Mohan

facebook的python business sdk使用了一个保留关键字-workaround?

  •  0
  • Mohan  · 技术社区  · 6 年前

    在Python3.7中,

    from facebookads.adobjects.adlabel import AdLabel 
    

    结果在

    Traceback (most recent call last):
      File "/Users/mohan/growth-tools/facebook-experiment/main.py", line 4, in <module>
        from facebookads.adobjects.adlabel import AdLabel
      File "/Users/mohan/growth-tools/facebook-experiment/venv/lib/python3.7/site-packages/facebookads/adobjects/adlabel.py", line 22, in <module>
        from facebookads.adobjects.abstractcrudobject import AbstractCrudObject
      File "/Users/mohan/growth-tools/facebook-experiment/venv/lib/python3.7/site-packages/facebookads/adobjects/abstractcrudobject.py", line 564
        params=None, async=False, include_summary=True,
                         ^
    SyntaxError: invalid syntax
    

    问题是,我认为,从Python3.7开始,Async已经成为一个保留关键字。有什么办法可以让我继续使用这个sdk吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   ivan_pozdeev RenanSS    6 年前

    显然,这个模块不支持3.7。因此,在供应商不提供支持的情况下,您可以一如既往地进行编辑和/或分叉。

    例如替换 async -gt; async_ 在模块的代码库中 Error when building TclTk in Visual Studio 2017 :

    $ find /Users/mohan/growth-tools/facebook-experiment/venv/lib/python3.7/site-packages/facebookads \
    ! -type d -a -name '*.py' -print0 |\
    xargs -0 python -c '
    import sys,re
    for fname in sys.argv[1:]:
     with open(fname,"rb") as f: l=f.read()
     (r,n)=re.subn(r"\b(async)\b",r"\1_",l)
     if n>0:
      with open(fname,"wb") as f: f.write(r)
    '
    
        2
  •  0
  •   Adam Dadvar    6 年前

    如果你认为SDK存在一个真正的问题,你能不能 sudo cd 然后编辑它?

    如果可以,那么最简单的选择就是通过每个实例。 async 并检查它是否是变量async,如果是,则替换它。

        3
  •  0
  •   morgonhorn    6 年前

    最后我只是循环浏览所有文件,并将“async”的任何实例替换为“async”,我的解决方案如下:

    import os, re
    path = r"path\to\facebookads"
    
    python_files = []
    
    for dirpath, dirnames, filenames in os.walk(path):
        for filename in filenames:
            if filename.endswith(".py"):
                python_files.append(os.path.join(dirpath, filename))
    
    for python_file in python_files:
    
        with open(python_file, "r") as f:
            text = f.read()
            revised_text = re.sub("async", "async_", text)
    
        with open(python_file, "w") as f:
            f.write(revised_text)