travaillant sur un projet python, j'ai essayé de séparer le code source et les tests unitaires; voici la structure du projet:
MyProject/
MANIFEST.in
README.md
setup.py
source/
__init.py__
my_project/
__init.py__
some_module.py
test/
__init.py__
my_project/
__init.py__
test_some_module.py
Et voici le setup.py
fichier:
from setuptools import setup, find_packages
setup(
name='my_project',
packages=find_packages(where='./source'),
description='My project to be packaged',
version='1.0.0',
author='me'
install_requires=[
'fastnumbers~=2.0.1',
'numpy~=1.14.1',
'pandas~=0.22.0'
],
extras_require={
'dev': ['check-manifest'],
'test': [
'mock',
'PyHamcrest',
'pytest',
'pytest-cov'
],
}
)
Ensuite, lorsque j'exécute la commande python3 setup.py sdist
, il échoue avec la sortie suivante:
running sdist
running Egg_info
writing my_project.Egg-info/PKG-INFO
writing requirements to my_project.Egg-info/requires.txt
writing dependency_links to my_project.Egg-info/dependency_links.txt
writing top-level names to my_project.Egg-info/top_level.txt
error: package directory 'my_project' does not exist
La résultante top_level.txt
le fichier semble correct:
my_project
mais il semble que le setuptools
ne démarre pas à partir du dossier source
pour trouver les modules à empaqueter.
setup.py
et MANIFEST.in
fichiers dans le dossier source
?where
dans _ setuptools.find_packages
fonction?Vous êtes à un pas d'une solution de travail. Ajouter
package_dir={
'': 'source',
},
aux arguments setup()
:
setup(
...,
packages=find_packages(where='source'),
package_dir={
'': 'source',
},
...
)
Plus d'informations sur le remappage des packages peuvent être trouvées dans la section Liste des packages entiers .
Cependant, il semble que vous ayez créé le répertoire source
dans un package python en y plaçant un __init__.py
. Était-ce intentionnel? Avez-vous des instructions d'importation comme
import source.my_project
from source.my_project.my_module import stuff
ou similaire, en utilisant source
comme nom de package? Gardez ensuite à l’esprit que les importations échoueront une fois que vous aurez installé votre package intégré car source
est omis lors de l’inclusion des sources dans la génération. Je vois deux façons:
source/__init__.py
, utilisez package_dir
comme décrit ci-dessus pour créer my_project
dans le package de niveau supérieur, omettez source
dans les importations (si vous obtenez des erreurs, supprimez le répertoire myproject-1.0.0.Egg_info
et recréez-le avec python setup.py Egg_info
), ousource
comme package de niveau supérieur: n'utilisez pas package_dir
, recherchez les packages dans le répertoire racine du projet (packages=find_packages()
sans indiquer explicitement where
).