Estoy intentando crear un paquete de instalación para un proyecto de Python con pruebas de unidad incluidas. Mi diseño del proyecto es el siguiente:ImportError en el subpaquete al ejecutar la prueba setup.py
setup.py
src/
disttest/
__init__.py
core.py
tests/
disttest/
__init__.py
testcore.py
Mi setup.py
se parece a esto:
from distutils.core import setup
import setuptools
setup(name='disttest',
version='0.1',
package_dir={'': 'src'},
packages=setuptools.find_packages('src'),
test_suite='nose.collector',
tests_require=['Nose'],
)
El archivo contiene la línea tests/disttest/testcore.py
from disttest.core import DistTestCore
.
Corriendo setup.py test
ahora da un ImportError: No module named core
.
Después de setup.py install
, python -c "from disttest.core import DistTestCore"
funciona bien. También funciona si pongo import core
en src/disttest/__init__.py
, pero realmente no quiero mantener eso y solo parece necesario para las pruebas.
¿Por qué es eso? ¿Y cuál es la forma correcta de solucionarlo?
Me pregunto: ¿es tal vez una práctica común hacer 'setup.py install' antes de' setup.py test'? La [documentación de setuptools] (http://peak.telecommunity.com/DevCenter/setuptools#test) parece que este no es el caso, mis fuentes deben colocarse en 'sys.path' automáticamente. Tal vez 'nose.collector' no está al tanto de mi directorio base' package_dir'? –
¿Cómo está importando core en testcore.py? ¿Qué es exactamente en su sys.path/PYTHONPATH? – Almad