web-dev-qa-db-ja.com

virtualenvでnoseを使用する際の問題

Virtualenvプロジェクトでnose(nosetests)を使用できません-virtualenv環境にインストールされているパッケージが見つからないようです。

奇妙なことに、私は設定することができます

test_suite = 'nose.collector'

setup.pyで、次のようにテストを実行します。

python setup.py test

しかし、nosetestsを直接実行すると、あらゆる種類のインポートエラーが発生します。

システム全体にnoseとvirtualenvnoseパッケージをインストールしてみましたが、うまくいきませんでした。

何かご意見は?

ありがとう!

46
Ryan

myenv/bin/python /usr/bin/nosetestsを実行できますか?仮想環境のライブラリセットを使用してNoseを実行する必要があります。

44
John Millikin

仮想環境にnoseのコピーをインストールする必要があります。 noseをvirtualenvに強制的にインストールするには、グローバルサイトパッケージにすでにインストールされている場合でも、pip installフラグを指定して-Iを実行します。

(env1)$ pip install nose -I

それ以降は、通常どおりnosetestsを実行できます。

60
edward

同じ状況で、パスを正しく更新するためにvirtualenvをリロードする必要がありました。

deactivate
env/bin/activate
10
Andrea Zonca

同様の問題が発生しました。次の回避策が役立ちました。

python `which nosetests` 

nosestestsだけでなく)

9
npinto

これが私のために働くものです:

$ virtualenv --no-site-packages env1
$ cd env1
$ source bin/activate            # makes "env1" environment active,
                                 # you will notice that the command Prompt
                                 # now has the environment name in it.

(env1)$ easy_install nose        # install nose package into "env1"

setup.pyに上記と同じtest_suite属性を持つ本当に基本的なパッケージslitherを作成しました。次に、パッケージソースをenv1/srcの下に配置しました。

env1/srcの内部を見ると、次のように表示されます。

slither/setup.py
slither/slither/__init__.py
slither/slither/impl.py          # has some very silly code to be tested
slither/slither/tests.py         # has test-cases 

testサブコマンドを使用してテストを実行できます。

(env1)$ pushd src/slither
(env1)$ python setup.py test
# ... output elided ...
test_ctor (slither.tests.SnakeTests) ... ok
test_division_by_zero (slither.tests.SnakeTests) ... ok
Ran 2 tests in 0.009s
OK
(env1)$ popd

または、nosetestsで同じテストを実行できます。

(env1)$ pushd src
(env1)$ nosetests slither/
..
Ran 2 tests in 0.007s
OK
(env1)$ popd

また、nosetestsは実行可能ファイルについて慎重になる可能性があることに注意してください。実行可能なpythonモジュールでテストを検出する場合は、--exeに合格できます。

8
Pavel Repin

他のすべてが失敗した場合は、venvにnoseをインストールするか、nosetests-2.7を実行してみてください。あなたのvenv pythonが2.7の場合、@ andrea-zoncaの答えは同じ効果があると思います

1
eggonlegs

nosetestsのどこかにインストールされているPATHが、virtualenvにインストールされているものよりも高い優先度でインストールされている可能性があります。現在のvirtualenvにインストールされているnoseモジュールと関連するnosetestsスクリプトを最優先する簡単な方法は、PATHを編集することです。

export PATH=/path/to/current/virtualenv/bin:$PATH
0
orluke

これは最近の変更かもしれませんが、私にとって、pipを介してnosetestsをインストールしたとき、.virtualenvs/<env>/binにインストールされたnosetests実行可能ファイルがありました。これは(当然のことながら)virtualenvで正しく動作します。