Python Business SDK Facebook использует зарезервированное ключевое слово - обходной путь?
В Python 3.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
Проблема в том, что async стал зарезервированным ключевым словом в Python 3.7. Есть ли обходной путь, который позволил бы мне продолжать использовать этот SDK?
2 ответа
Ясно, что этот модуль не поддерживает 3.7. Таким образом, вы делаете, как всегда, когда поставщик не предоставляет поддержку: отредактируйте его и / или разветвите.
Например заменить async
-> async_
через кодовую базу модуля как в Ошибка при сборке TclTk в 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)
'
В итоге я просто перебрал все файлы и заменил все экземпляры 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)
Если вы думаете, что есть настоящая проблема с SDK, не могли бы вы просто sudo cd
тут же редактировать это?
Если вы можете, то самый простой вариант - просто просмотреть каждый экземпляр async
и проверьте, является ли она переменной async, а затем замените ее, если она есть.
Facebook исправил это для библиотеки Python, используйтеis_asyc
вместо этого, как показано здесь.
Пытаться facebook_business
вместо того facebookads
. См. Также этот связанный ответ.