Python 3.X ctypes 和 greenlet size changed 坑三则
Posted | stdout
安装 setup.py 的时候 No module named '_ctypes'
报错
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/local/python3/lib/python3.9/site-packages/setuptools/__init__.py", line 18, in <module>
from setuptools.dist import Distribution
File "/usr/local/python3/lib/python3.9/site-packages/setuptools/dist.py", line 34, in <module>
from setuptools import windows_support
File "/usr/local/python3/lib/python3.9/site-packages/setuptools/windows_support.py", line 2, in <module>
import ctypes
File "/usr/local/python3/lib/python3.9/ctypes/__init__.py", line 8, in <module>
from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'
解决办法是不要用 3.9。
如果实在要用,则自己编译前需要加上 yum install libffi-devel
或者 sudo apt-get install libffi-dev
来自SO
greenlet.greenlet size changed
然后出错
/usr/local/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject
return f(*args, **kwds)
/usr/local/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: greenlet.greenlet size changed, may indicate binary incompatibility. Expected 144 from C header, got 152 from PyObject
return f(*args, **kwds)
Segmentation fault (core dumped)
这个摘自官方 iseue
On Python 3.7 and higher, gevent 20.9.0 is required to use (a standard build of) greenlet 0.4.17.
解决办法:pip install gevent==20.9.0 pip install greenlet==0.4.17
SQLAlchemy 1.4 大战 greenlet 0.4.17
to accommodate for the handling of Python contextvars (introduced in Python 3.7) for greenlet versions greater than 0.4.17. Greenlet version 0.4.17 added automatic handling of contextvars in a backwards-incompatible way; we’ve coordinated with the greenlet authors to add a preferred API for this in versions subsequent to 0.4.17 which is now supported by SQLAlchemy’s greenlet integration. For greenlet versions prior to 0.4.17 no behavioral change is needed, version 0.4.17 itself is blocked from the dependencies.
然后就直接在 setup.cfg里 给 greenlet != 0.4.17
了。
神仙打架,不听不听,和尚念经,果断 sqlalchemy==1.3.24
降级。
Comments