У меня есть библиотека C, которую я пишу, и моя цель — иметь возможность упаковывать и распространять эту библиотеку C через пакет python на PyPI. Идея состоит в том, что это комбинация кода Python, модуля расширения и библиотеки C. Я хочу, чтобы пользователь мог установить и собрать библиотеку C во время выполнения с помощью определенных функций Python, используя distutils.ccompiler
, после установки пакета. Однако я столкнулся с проблемой, когда, хотя исходные файлы C перечислены в MANIFEST.in
, они не отображаются, когда я запускаю команду python setup.py build
.
Вот макет моего каталога
home -
setup.py
MANIFEST.in
package -
ctools -
__init__.py
src -
some_funcs.c
include -
some_funcs.h
pyext -
pymain.c
Мой файл MANIFEST.in выглядит так
recursive-include package *.c *.h
include LICENSE.txt
include README.md
моя настройка distutils выглядит так
macro_defs = []
if os.name == 'nt':
macro_defs.append(('_CRT_SECURE_NO_WARNINGS', '1'))
# This goes under the main package
# Will be linked with the C library later on
core_module = distutils.core.Extension('package.core',
define_macros = macro_defs,
include_dirs = ['include'],
sources = ['pyext/pymain.c'])
distutils.core.setup(name='package',
version='0.0.1',
description='A library for searching and analyzing data',
author='Me',
author_email='[email protected]',
url='https://github.com/some/repo',
download_url='https://github.com/some/repo/archive/master.zip',
license = 'MIT',
keywords = keyword_list,
classifiers = classifers_list,
long_description = open('README.md').read(),
packages=['package', 'package.ctools'],
ext_modules=[core_module],
)
python setup.py sdist
работает нормально, как и предполагалось, но когда я запускаю команду build
, она не копирует файлы под package/src
или package/include
.
Когда пользователь устанавливает мой пакет из pip, я хочу, чтобы эти исходные файлы C и файлы заголовков были встроены в их установленный пакет python. Как я могу заставить это работать?
Чтобы было ясно, я хотел бы, чтобы результат моей команды build
создал макет, идентичный моему источнику package
.