2017-02-12 33 views
0

這是我第一次使用Travis和「測試」。 我創建了一些測試,現在我想將它們添加到Travis中,但是我遇到了PATH問題。[Python]無法讓Travis CI工作。路徑問題

以下是我有:

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 

這在當地工作,但特拉維斯CI說:

  • 從sheetmaker進口html_builder
  • ModuleNotFoundError:無模塊命名爲「 sheetmaker」

什麼是進口的東西以正確的方式?下面是詳細信息GitHub的項目:github project!

在此先感謝。

+1

我會建議,而不是從上面'test_html_builder.py'的目錄中工作,並運行'蟒蛇-m tests.test_html_builder',這會給你一個更真實的運行環境,並在本地和Travis-CI工作沒有用'sys.path'打亂。 [這裏有一些關於爲什麼你應該幾乎總是這樣做的額外閱讀](https://github.com/asottile/scratch/wiki/PythonPathSadness) –

+0

您需要在sheetmaker目錄中有一個'__init __。py'。 – erip

+0

@erip在我的情況下,我有一個__init__.py文件已經在我想導入模塊的目錄中,而Travis仍然無法找到它。我會嘗試上傳顯示此視頻的視頻。 –

回答

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我沒有嘗試您的解決方案,但我可以通過在.travis.yml明確聲明PYTHONPATH來解決路徑問題

樣品.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應該工作。

我喜歡這個解決方案,因爲你不需要改變你的代碼,只是特拉維斯配置文件。