2017-02-12 2 views
0

これはトラビスと一般的な "テスト"を初めて使用したときです。 私はいくつかのテストを作成しましたが、トラビスに追加したいのですが、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とテストが私のPCで作業している実行するように管理します。 sheetmakerインポートhtml_builderから

  • ModuleNotFoundError::いいえモジュールは 'という名前のない一言で言えば、これはこれはローカルに動作しますが、トラヴィスCIは言う

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

    私はtest_html_builder.py中のものを輸入しています方法です製版者 '

物を取り込む正しい方法は何ですか?ここでは、詳細についてはgithubプロジェクトです:github project!

ありがとうございます。

+1

代わりに、 'test_html_builder.py'の上にあるディレクトリから作業し、' python -m tests.test_html_builder'を実行すると、より現実的な実行環境が得られ、localとtravis-ciの両方で動作します'sys.path'でmuckingします。 [これはほとんどいつもこれをやるべきなのか、いくつかの追加の記事があります] –

+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

サンプル.travis.ymlでPYTHONPATHを宣言することで、パスの問題を修正することができました:

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設定ファイルです。

関連する問題