27

私はそれをインストールpyenvして、異なるバージョンのpythonをインストールしました:

$ pyenv versions
  system
  2.7.1
  3.2.5
  3.5.0
  3.5.1
* 3.5.2

次のコマンドを使用してに切り替えpython 3.5.2ます。

pyenv シェル 3.5.2

そして、Pythonのバージョンを確認すると、次のようになります。

$ python --version
Python 3.5.2

しかし、私が実行するpytestと、それはまだ下で実行されpython 2.7.6ます:

pytest -v
============================================= ===================== テストセッション開始 ========================= =========================================
プラットフォーム linux2 -- Python 2.7.6 、pytest-3.0.3、py-1.4.31、pluggy-0.4.0 -- /usr/bin/python

pytest古いバージョンで実行されているのはなぜですか?

4

3 に答える 3

27

結論:実行

  • python -m pytest、 また
  • py.test-<version>代替の Pythonpytestがシステム パッケージ マネージャーと共にインストールされている場合、または
  • 代替の Python が でインストールされている場合は、 でそのバージョンpyenv切り替えてpyenv、そのバージョンがインストールされていることを確認してください。その後、実行するだけです。 pytestpytest
    • 実行可能ファイルも切り替えられるものの中にあるため、インストールする前にpip別の Python に切り替える必要もあります。 pytest

ご覧のとおり、/usr/bin/pytest(システム パッケージ マネージャーのパッケージに属します) には、システム python のインストールに対応するためpython-pytest、シバンがあります。!#/usr/bin/python

pyenvそれREADME.mdが言うよう/usr/bin/pythonに、置き換えられません-システムパッケージの破損を避けるために実際に置き換えるべきではないためです。

代わりに、そのディレクトリを追加し、PATHそこにランチャー (「shim」と呼ばれる) を挿入します。これは、「 」と入力すると呼び出されますpython。おそらくご想像のとおり、このハックは上記のようなシバンによって無視されます-当然のことです。

  • 実行python -m pytestすると、pythonそれ自体を起動するものは何でも、そのインストールからパッケージを使用します。
  • または、pytest他の Python バージョンでは、インストール方法に応じて 、PATH名前付きpy.test-<version>(py.test-3または など) にバージョン管理された実行可能ファイルが含まれる場合があります。py.test-3.6
    • 非標準のpython用のシステムパッケージマネージャーのパッケージからのものである場合、python36-pytestこれは事実上保証されています。
    • を使用してバージョンをインストールするとpip、バージョン管理されていない実行可能ファイルのみが作成されることを確認しました (ただし、バージョン管理されたものを自分で作成することはできます)。さらに、別のバージョンの Python に同じパッケージをインストールしても、同じ .xml を--prefix使用すると、既存の実行可能ファイルが上書きされます。
  • pyenvの提案された方法python、関心のあるすべてのバージョンとそれらのパッケージを の下にインストールすること~/.pyenv/versionsです。
    • これはシステムの Python には適用されませんが、デフォルト/usr/localを使用できます。
    • 別の Python バージョンに切り替えると、そのバージョンに現在インストールされているすべてのスクリプト (! を含む) のshimを作成すると主張するため、パスを指定せずにそれらのスクリプトを呼び出すと、それらの shim が実行されます。 pip
      • そのため、パッケージ (およびそのスクリプト) が代替バージョン用にインストールされておらず、システム バージョン用にインストールされている場合、その実行可能ファイルを実行しようとすると、現在表示さ/usr/localれている結果だけが "フォール スルー" されます。
于 2016-11-21T12:34:55.073 に答える
5

私はインターネットを検索し、関連する質問を見つけました。その男は次の方法で回避します:

python -m pytest tests/my_test.py

それが機能するかどうか教えてください:)

于 2016-11-21T11:50:10.353 に答える