web-dev-qa-db-ja.com

Windowsで `#!/ usr / bin / env python`を機能させる

MSYSが提供するWindowsではBashを使用しています。

Pythonファイルを#!/usr/bin/env pythonのシバンで実行しようとしましたが、次のエラーメッセージが表示されます:

/usr/bin/env: python: No such file or directory

これを機能させるにはどうすればよいですか?

Pythonファイルにpythonのサフィックスを付けることで起動できることはわかっていますが、サフィックスなしでも機能させたいです。

14
Ram Rachum

Virtualenvのactivate.shファイルとMSYSGIT。 Windowsで動作することを意図したものではありません。

0
Ram Rachum

代わりに、Pythonがインストールされている適切なパスを使用してください。例:

#!c:/Python/python.exe

システムでUnixライクなパスをサポートしている場合(私はMSYSに詳しくありません)、python実行可能ファイルへのパス、つまりwhich pythonの出力をいつでも入力できます。

9
Daniel Beck

あなたは興味があるかもしれません WindowsのPythonランチャー

3
Piotr Dobrogost

(シェルから)実行するとどうなりますか?

$ /usr/bin/env python

..?

インタラクティブなpythonセッションを開始すると、pythonが見つかります。(単に実行することもできます:type python)。 「そのようなファイルやディレクトリはありません」と表示される場合は、pythonがPATHに見つかりません。以下を微調整して問題を解決できるかどうかを確認します(path/to/python内のスペースが問題を引き起こす可能性があります)。

$ export PATH=$PATH:/path/to/python
$ /usr/bin/env python
0
michael

問題の根本は、シバンのスペースが実行可能ファイルに追加の引数を提供するものとして解釈されるため、C:\Program Files\Python\python.exeC:\Programを引数として指定されたFiles\Python\python.exeと見なされることです。

Windowsが$HOMEディレクトリとProgram Filesなどの場所でスペースを愛しているため、cmd.exeやPowershellやその他のツールで実際に問題が発生する可能性があるため、これに対する最善の解決策は次のとおりです。

インストールPython to C:\Python and C:\Python folder where python.exe lives and the Scripts directory that lives into PATHシステムレベルまたはユーザーレベルの環境変数。

Python 2.7.xと3.xを共存させる必要がある場合は、それらをC:\Python27C:\Python36C:\Python37にインストールして、python.exeからpython2.exepython36.exepython37.exeなどに変更し、それらの各フォルダーとそのScriptsフォルダーをPATHに追加します。 Python 3つのバージョンを「デフォルト」にしたいバージョンを決定し、python3.exeとしてそのフォルダーにコピーを作成して、!#/usr/bin/env python3を使用するスクリプトを処理する。

ユーザーのホームディレクトリにスペースがある場合、pip install --user somepackage構文を使用すると問題が発生する可能性もあります。 --userはデフォルトでホームディレクトリになり、この場合もスペースが問題を引き起こします。回避策は ここ で説明されていますが、結局はPYTHONUSERBASEを環境にエクスポートすることになります。

export PYTHONUSERBASE=/myappenv
pip install --user SomePackage

またはWindows(Powershell)の場合:

$env:PYTHONUSERBASE='C:\PythonPkgs'
pip install --user SomePackage
0
dragon788

Windows 10の最新バージョンは、Linuxサブシステムのインストールをサポートしています。そこから実行する場合、パスは正しいはずです。

このように実行しても問題がなければ、ソリューションとして機能するはずです。

0
Griffin