結論:実行
python -m pytest
、またはpy.test-<version>
代替の Python とpytest
の場合 システム パッケージ マネージャーでインストールされている、または- 別の Python が
pyenv
でインストールされている場合 、pyenv
で切り替え そのバージョンに そしてpytest
であることを確認してください そのために設置。次に、pytest
を実行するだけです .pip
以来 実行可能ファイルも切り替えられるものの 1 つです。インストールする前に、代わりの Python に切り替える必要があります。pytest
ご覧のとおり、/usr/bin/pytest
(システム パッケージ マネージャーの python-pytest
に属します) パッケージ) にはシバン !#/usr/bin/python
があります システム python のインストールに対応しているためです。
pyenv
、その README.md
として /usr/bin/python
を置き換えません - システム パッケージの破損を避けるために、実際に置き換えてはならないためです。
代わりに、そのディレクトリを PATH
に追加します そこにランチャー (「シム」と呼ばれる) を挿入します。これは、「python
」と入力したときに呼び出されます。 ".おそらくご想像のとおり、このハックは上記のようなシバンによって無視されます-当然のことです.
python -m pytest
を実行していますpython
のいずれかになります 自身を起動するものは、そのインストールからパッケージを使用します。- または、
pytest
他の Python バージョンでは、PATH
にバージョン管理された実行可能ファイルが含まれる場合があります。py.test-<version>
という名前 (例:py.test-3
またはpy.test-3.6
) インストール方法によって異なります。- 非標準の python 用のシステム パッケージ マネージャーのパッケージからの場合 -
python36-pytest
のように - これは事実上保証されています。 pip
のバージョンをインストールするかどうかを確認しました 、バージョン管理されていない実行可能ファイルのみを作成します(ただし、バージョン管理されたものを自分で作成できます)。さらに、異なる Python バージョンの同じパッケージを同じ--prefix
でインストールすると、 、既存の実行可能ファイルを上書きします!
- 非標準の python 用のシステム パッケージ マネージャーのパッケージからの場合 -
pyenv
の提案された方法は、すべてのpython
をインストールすることのようです 興味のあるバージョンおよび~/.pyenv/versions
以下のパッケージ .- これはシステムの Python には適用されませんが、デフォルトの
/usr/local
には適用されません - 別の Python バージョンに切り替えると、すべて のシムを作成すると主張します。 スクリプト (
pip
を含む) !) そのバージョンに現在インストールされているもの 、パスなしでこれらのスクリプトを呼び出すと、それらのシムが実行されます.- したがって、パッケージ (およびそのスクリプト) が代替バージョン用にインストールされておらず、システム バージョン用にインストールされている場合、その実行可能ファイルを実行しようとすると、
/usr/local
に「フォール スルー」します。 あなたが今見ている結果だけで。
- したがって、パッケージ (およびそのスクリプト) が代替バージョン用にインストールされておらず、システム バージョン用にインストールされている場合、その実行可能ファイルを実行しようとすると、
- これはシステムの Python には適用されませんが、デフォルトの
Python 2.7 で「black」を実行したかっただけですが、pyenv の Python 3.7.9 にインストールしました。スクリプト /usr/local/bin/black27
で正しく動作しました :
PYENV_VERSION=3.7.9 black -t py27 "[email protected]"
動作しませんでした:
pyenv shell 3.7.9
black -t py27 "[email protected]"
も
pyenv shell 3.7.9
pyenv exec black -t py27 "[email protected]"
この関連する質問を見つけました。彼らにとっては、これでうまくいきました:
python -m pytest tests/my_test.py
うまくいくことを願っています