2017-02-12 1 views
0

Это мой первый опыт использования Travis и «тест» в целом. Я создал несколько тестов, и теперь хочу добавить их в Тревис, но у меня проблемы с PATH.[Python] Невозможно заставить Travis CI работать. Проблемы с PATHs

Вот что у меня есть:

sheetmaker/ 
     html_builder.py 
     constants.py 
     sheetmaker.py 
tests/ 
     test_html_builder.py 
     data/ 
       test_html_constants.py 

мне удается запустить test_html_builder.py и тест работает в моем компьютере. Короче говоря, это то, как я импортировать материал в test_html_builder.py

sys.path.insert(0, os.path.abspath('..')) 
from sheetmaker import html_builder 
from data import test_html_constants 

Это работает локально, но Travis CI говорит:

  • из sheetmaker импорта html_builder
  • ModuleNotFoundError: модуль не назвал " листы »

Что такое правильный способ импорта материала? Вот проект github для получения более подробной информации: github project!

Заранее спасибо.

+1

Я бы предложил работать из каталога выше 'test_html_builder.py' и запустить' python -m tests.test_html_builder', это даст вам более реалистичную среду исполнения и будет работать как на локальном, так и на travis-ci без сбрасывая «sys.path». [вот несколько дополнительных чтений о том, почему вы должны почти всегда делать это) (https://github.com/asottile/scratch/wiki/PythonPathSadness) –

+0

Вам нужно '__init __. py' в каталоге листового листа. – erip

+0

@erip В моем случае у меня был файл __init__.py уже в каталоге с модулем, который я хотел импортировать, и Тревис все еще не смог его найти. Я попробую загрузить видео, показывая это. –

ответ

2

После тонны исследований я начал печатать print(sys.path), чтобы узнать, где «я работал». Оттуда я создал обработчик исключений

try: 
    sys.path.insert(0, os.path.abspath('..')) #Works for local 
    from sheetmaker import html_builder 
    from data import test_html_constants 
except: 
    sys.path.insert(0, os.path.abspath('.')) #Works for Travis CI 
    from sheetmaker import html_builder 
    from data import test_html_constants 

Это правильный способ импорта модулей? Не знаю, но это работает.

1

@ cosme12 Я не пытался ваше решение, но я был в состоянии решить проблему пути, явно объявляя PYTHONPATH в .travis.yml

образец .travis.yml:

sudo: false 
language: python 

python: 
    - "3.6" 

install: 
    - export PYTHONPATH=$PYTHONPATH:$(pwd)/src/thermo 
    - python3 setup.py install 

script: 
    - pytest -s 

Просто вручную добавьте путь, который отсутствует в .travis.yml, и travis должен работать.

Мне нравится это решение, потому что вам не нужно изменять свой код, просто файл конфигурации travis.