Когда setup.py указывает package_dir, отличный от имени пакета, функция nosetests. setup.py не работает из-за ImportError. Ниже приведен минимальный пример.команда setup.py nosetests бросает ImportError при указании package_dir
структура каталогов:
setup.py
src/
__init__.py
myclass.py
unittests/
__init__.py
test.py
Файлы инициализации пусты. MyClass тривиальна:
class myclass():
def __init__():
a=10
test.py просто инициализирует экземпляр MyClass:
import unittest
import mypkg
class Tests(unittest.TestCase):
def _run_test(self):
a = mypkg.myclass()
а также setup.py файл выглядит следующим образом
from setuptools import setup
setup(
name = 'mypkg',
packages = ['mypkg'],
package_dir={'mypkg':'src'}
)
Он строит и устанавливает правильно , но до установки вы получаете:
python3.4 setup.py nosetests
running nosetests
running egg_info
writing top-level names to mypkg.egg-info/top_level.txt
writing dependency_links to mypkg.egg-info/dependency_links.txt
writing mypkg.egg-info/PKG-INFO
reading manifest file 'mypkg.egg-info/SOURCES.txt'
writing manifest file 'mypkg.egg-info/SOURCES.txt'
E
======================================================================
ERROR: Failure: ImportError (No module named 'mypkg')
----------------------------------------------------------------------
Traceback (most recent call last):
:
:
:
File "<root_dir>/unittests/test.py", line 2, in <module>
import mypkg
ImportError: No module named 'mypkg'
----------------------------------------------------------------------
Ran 1 test in 0.026s
FAILED (errors=1)
Я преследовал его, и я уверен, что это происходит, потому что в setup.py я фактически переименовываю каталог с помощью package_dir. Есть ли какой-то трюк, чтобы делать носетесты без изменения моей структуры каталогов?
Примечание: это выполняется с использованием python3.4 с Setuptools версии 2.1 и nosetests версии 1.3.4
Это будет работать только если файлы не были перемещены в процессе установки Setuptools ... – Solter