我似乎已经能够(最终)解决这个问题......我可能有几个不必要的步骤,但我认为它们改进了我的整体构建系统(再次,目的是能够使用 cython 的共享库在 Firebase 上)。
来自 Docker(或者在我的情况下是 Linux VM),在我的私人仓库中,我cythonize 重要的代码,然后把所有东西都变成了一个轮子。从这里,我在方向盘上运行auditwheel show,以检查它是否符合manylinux1 标签(或我想要的任何manylinux)。在这种情况下,它确实坚持manylinux1,所以这次不需要修理轮子或做任何恶作剧。
... .py # Other irrelevant .py files
magic.py # Source code that needs to be cython'd
setup.py
简化 setup.py:
from setuptools import setup, find_packages
from Cython.Build import cythonize
setup(
name='magiclib',
version='0.1.0',
packages=find_packages(),
ext_modules=cythonize(
"magic.py",
compiler_directives={'language_level': 3}
)
)
运行 python setup.py bdist_wheel 会创建一个名为 dist/magiclib-0.1.0-cp37-cp37m-linux_x86_64.whl 的轮子
从这里,我运行auditwheel show dist/magiclib-0.1.0-cp37-cp37m-linux_x86_64.whl,这表明代码已经遵循manylinux1 标签,但我仍然运行auditwheel repair dist/magiclib-0.1.0-cp37-cp37m-linux_x86_64.whl,它创建wheelhouse/magiclib-0.1.0-cp37-cp37m-manylinux1_x86_64.whl。
此时,我将这个轮子带入我的 GCF 项目,并使用:
pip install -t magiclib magiclib-0.1.0-cp37-cp37m-manylinux1_x86_64.whl
这基本上将轮子解压缩到一个子目录中,我可以将其供应并部署到 Google Cloud 并从我的 Functions 中调用。
在我的一些简单代码上运行良好,我将尝试一些更复杂的代码。