Je crée un paquet python avec une extension C++. J'essaye de faire ceci avec setuptools car cela semble être la solution préférée. Étant donné qu'il autorise setup_requires, install_requires, je suis d'accord et l'utilise pour mes paquets python seulement. Cependant, je suis incapable de le faire fonctionner quand j'ai un module d'extension C++. Ensuite, j'ai recours à distutils.core pour le faire fonctionner. Je voudrais savoir comment le faire fonctionner en utilisant setuptools. Mon script de configuration ressembledistutils.core vs setuptools avec l'extension C++
from setuptools import setup
import shutil
import os
# folder where .so is being build by cpp compilation
so_src = os.path.join(dir, 'cpp/build/')
# folder where .so should live in python package
so_des = os.path.join(dir, 'package_py/cpp/')
# extension module
lib_files = ['cpp_py.so']
# copy shared lib
for f in lib_files:
shutil.copyfile(so_src + f, so_des + f)
# set-up script
setup(
name=DISTNAME
, version=FULLVERSION
, description= DESCRIPTION
, author= AUTHOR
, author_email= EMAIL
, maintainer= AUTHOR
, maintainer_email= EMAIL
, long_description=LONG_DESCRIPTION
, packages=['package_py',
'package_py.cpp']
, package_dir={'package_py.cpp': 'package_py/cpp'}
, package_data={'package_py.cpp': lib_files}
)
Il en résulte un fichier package_py-0.0.1-py3.6.egg dans mon python site-packages. Le package seulement fonctionne lorsqu'il est utilisé à partir du dossier d'installation.
Modification de la première ligne à utiliser distutils.core au lieu de setuptools
from distutils.core import setup # only change, remainder is the same!!
import shutil
import os
# folder where .so is being build by cpp compilation
so_src = os.path.join(dir, 'cpp/build/')
# folder where .so should live in python package
so_des = os.path.join(dir, 'package_py/cpp/')
# extension module
lib_files = ['cpp_py.so']
# copy shared lib
for f in lib_files:
shutil.copyfile(so_src + f, so_des + f)
# set-up script
setup(
name=DISTNAME
, version=FULLVERSION
, description= DESCRIPTION
, author= AUTHOR
, author_email= EMAIL
, maintainer= AUTHOR
, maintainer_email= EMAIL
, long_description=LONG_DESCRIPTION
, packages=['package_py',
'package_py.cpp']
, package_dir={'package_py.cpp': 'package_py/cpp'}
, package_data={'package_py.cpp': lib_files}
)
je reçois un dossier package_py (avec .so fichier) et package_py-0.0.1-py3.6.egg-info dans le site -paquets. Maintenant, le module fonctionne dans tous les dossiers. Comme je voudrais étendre le paquet python pour utiliser aussi setup_requires, instal_requires je veux vraiment utiliser setuptools. Comment puis-je obtenir le package de travailler dans tous les dossiers à l'aide setuptools au lieu de distutils.core