Я работаю на NetworKit (https://networkit.iti.kit.edu/), гибридный проект C ++ / Cython / Python. Я хочу подготовить setup.py
сценарий, так что NetworKit может быть легко установлен через pip install networkit
, Однако есть некоторые трудности.
Во-первых, позвольте мне описать структуру каталогов хранилища и то, что в настоящее время делает setup.py.
Структура каталогов:
NetworKit/
|- setup.py
|- README.rst
|- MANIFEST.in
|-src/
|-cpp/
| c++ header and source files in subfolders
|-python/
|- __init__.py
|- _NetworKit.pyx
| various python modules
python setup.py develop
в настоящее время делает 3 вещи:
src/python
(для чего нужно ядро C ++)src/python
,Вот соответствующая выдержка из setup.py:
if ("install" in sys.argv) :
build_NetworKit()
src = ["_NetworKit.pyx"]
modules = [Extension("_NetworKit",
src,
language = "c++",
extra_compile_args=["-fopenmp", "-std=c++11", "-O3", "-DNOGTEST"],
extra_link_args=["-fopenmp", "-std=c++11"],
libraries=["NetworKit-Core-{0}".format(optimize)],
library_dirs=["../../"])]
for e in modules:
e.cython_directives = {"embedsignature" : True}
setup(name="networkit",
version="3.2",
url="https://networkit.iti.kit.edu/",
keywords = "graph algorithm network analysis social network",
cmdclass={"build_ext": build_ext},
ext_modules=modules)
Чего я добился до сих пор:
С MANIFEST.in
Я успешно включил все заголовочные и исходные файлы C ++ в пакет. python setup.py sdist
а также pip install networkit
с тестового сервера PyPI успешно компилирует библиотеку, создает расширение и помещает его в pythonX/dist-packages/
, Вот где начинаются проблемы:
pythonX/dist-packages/networkit-x.y/
, Кроме того, _NetworKit.pyx не включается автоматически, хотя он является источником для модуля расширения; Я должен был включить его через MANIFEST.in
, packages
а также package_dir
в setup(...)
в приведенной выше выдержке. В то время как sdist
работал и включал все .py
файлы, которые я обычно заканчивал directory ... not existing
во время установки. Кроме того, я попытался адаптировать структуру хранилища, а также расположение setup.py
чтобы быть в большей степени в соответствии с официальными рекомендациями. Однако это тоже не помогло. Также, чтобы подвести итог, что именно должно быть установлено, где: модули Python и субмодули, а также расширение должны идти под pythonX/dist-packages/networkit-x.y/
,
Помимо, вероятно, не очень правильной структуры каталогов, что мне не хватает в setup(...)
Конфигурация, чтобы получить расширение, а также правильно установленные модули Python?
Во-первых, вам нужно ключевое слово distutils setup () package_dir={'':'src/python'}
чтобы указать корневую папку ваших модулей Python, а во-вторых, вы можете использовать функцию setuptools find_packages(root_dir, include=[], exclude=[])
найти нужные вам пакеты / модули. Так что вы, вероятно, захотите использовать packages=find_packages('src/python')
,
Увидеть Вот в документации setuptools для получения дополнительной информации.
Setuptools всегда установит ваш пакет под ../site-packages/<packagename>
, dist-packages
является дополнением к Debian для установленных пакетов менеджера системных пакетов; но ваш питон должен выглядеть под правильным site-packages
папка тоже.
Если вы хотите легко устанавливать и удалять пакеты во время разработки, я бы использовал pip install -e .
а также pip uninstall -y networkit
соответственно. Наличие pip-управления установкой позволяет также удалить его (чтобы вы могли проверить, все ли прошло нормально и т. Д.).