我有一个使用 Python 3.5.2 在我的系统上使用 PyO3 创建的库。.so 文件链接到对应的 libpython3.5m 文件:
$ ldd my_library.so
linux-vdso.so.1 => (0x00007ffffc823000)
libpython3.5m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0 (0x00007fcac34b0000)
...
但是,如果我尝试在具有不同 Python 次要版本(例如,3.6.9 或 3.7.3)的另一个系统上使用我的库,则该库不存在:
$ ldd my_library.so
linux-vdso.so.1 (0x00007fffefaae000)
libpython3.5m.so.1.0 => not found
...
因此,我不能使用我的库:
$ python3
Python 3.6.9 (default, Apr 18 2020, 01:56:04)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import my_library
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory
有没有一种方法可以更通用地将我的库链接到 libpython 以适应这些次要版本更改,或者至少允许向后兼容(在较新版本上构建但允许较旧版本的 Python 也使用我的库)?或者我可以在运行时做些什么来让库仍然运行?