Проблемы с распространением библиотеки Python с использованием ctypes - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь распространять библиотеку Python, которая динамически загружает общий объектный файл, используя ctypes. Общий объектный файл был создан с использованием Golang. У меня есть простой main.go файл, который выполняет некоторые сетевые запросы по нескольким переданным ссылкам, и .so & .h файлы, созданные из этого. Я следовал этим инструкциям для компиляции заголовка и файла общего объекта: https://medium.com/learning-the-go-programming-language/calling-go-functions-from-other-languages-4c7d8bcc69bf

Текущая структура библиотеки: cwd (текущий рабочий каталог)

  • cwd/display_status/display_status.py
  • cwd/display_status/__init__.py
  • cwd/display_status/display_status.h
  • cwd/display_status/display_status.so
  • cwd/display_status/main.go

display_status.py работает правильно при прямом запуске pyhton3 display_status.py, но когда я загружаю библиотеку в PyPI и пытаюсь import display_statusЯ получаю эту ошибку.

ImportError: dynamic module does not define module export function (PyInit_display_status)

Я пробовал различные настройки, предоставленные https://setuptools.readthedocs.io/en/latest/, но безрезультатно.

Моя текущая настройка

import pathlib
from setuptools import setup, find_packages, Extension

# The directory containing this file
HERE = pathlib.Path(__file__).parent

# The text of the README file
README = (HERE / "README.md").read_text()

module1 = Extension('display_status', sources=['main.go'])
# This call to setup() does all the work
setup(
    name="display_status",
    version="1.0.11",
    description="Displays the status of links",
    long_description=README,
    long_description_content_type="text/markdown",
    url="https://github.com/KingAkeem/display_status",
    author="Akeem King",
    author_email="akeemtlking@gmail.com",
    license="GNU GPLv3",
    classifiers=[
        "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
        "Programming Language :: Python :: 3",
        "Programming Language :: Python :: 3.6",
    ],
    packages=['display_status'],
    package_data=find_packages(),
    """
    package_data={
        'display_status':
        [
            'main.go',
            'display_status.h',
            'display_status.so'
        ]
    },
    """
    include_package_data=True
)
...