Нос жалуется на Python 3, но не на 2

Я написал тесты, используя структуру Python unittest, и запустил их с помощью Nose в Python 2.7 на Win7 x64, и они отлично работают:

D:\Users\Nick\Local HG\Waldo\code\shared\collider>py -2 -mnose
.............
----------------------------------------------------------------------
Ran 13 tests in 0.039s

OK

Однако, когда я запускаю их под Python 3.4, я получаю необъяснимую ошибку.

D:\Users\Nick\Local HG\Waldo\code\shared\collider>py -3 -mnose
E
======================================================================
ERROR: Failure: ValueError ('D:\\Users\\Nick\\Local HG\\Waldo\\code\\shared\\__init__.py\\__init__.pyw\\__init__.pyc' is
 not a package)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\Python34\lib\site-packages\nose\failure.py", line 39, in runTest
    raise self.exc_val.with_traceback(self.tb)
  File "D:\Python34\lib\site-packages\nose\loader.py", line 414, in loadTestsFromName
    addr.filename, addr.module)
  File "D:\Python34\lib\site-packages\nose\importer.py", line 47, in importFromPath
    return self.importFromDir(dir_path, fqname)
  File "D:\Python34\lib\site-packages\nose\importer.py", line 94, in importFromDir
    mod = load_module(part_fqname, fh, filename, desc)
  File "D:\Python34\lib\imp.py", line 245, in load_module
    return load_package(name, filename)
  File "D:\Python34\lib\imp.py", line 210, in load_package
    raise ValueError('{!r} is not a package'.format(path))
ValueError: 'D:\\Users\\Nick\\Local HG\\Waldo\\code\\shared\\__init__.py\\__init__.pyw\\__init__.pyc' is not a package

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (errors=1)

Моя структура пакета:

collider\
  |- tests\
  |    |- __init__.py
  |    |- test_removing_chains.py
  |
  |- __init__.py
  |- collider.py
  |- viz.py

Я не знаю, откуда в ошибке берется бит "...\\__init__.py\\__init__.pyw\\__init__.pyc" или почему он вообще поднимается вверх по папке (по-видимому, \collider удаляется из пути), хотя я запускаю программу либо в пакете root или из папки \tests (та же ошибка).


person Nick T    schedule 26.05.2014    source источник
comment
pep420 в отношении python 3.3 включает предложение Пакеты пространства имен не могут содержать __init__.py . Я не на 100% знаком с различием между «обычным пакетом» и «пакетом пространства имен», но я подозреваю, что проблема может быть вызвана файлом __init__.py в ваших тестах и/или корневом каталоге. Может, попробовать их передвинуть и посмотреть, что получится?   -  person tasteslikelemons    schedule 27.05.2014


Ответы (1)


После удаления лишних файлов __init__.py и .pyc вверх по паре путей, как было предложено, проблема исчезла.

Однако, к сожалению, я сразу удалил кучу и добавил их обратно один за другим, не воссоздав проблему, поэтому я не смог выделить ключевую точку сбоя.

person Nick T    schedule 29.05.2014