9

特定のPythonバージョンで実行される.pyファイルの関連付けを設定する必要があります。ただし、この関連付けは、単一のcmd.exeセッションに対してのみ行う必要があります(並列セッションは影響を受けません)。Windowsはこれを許可しますか?

答えはノーだと思いますが、そのような機能をvirtualenvに組み込むというアイデアを捨てる前に、いくつかの証拠を確認したいと思います。

4

4 に答える 4

8

できますよ。あなたはヤコブの答えに対するあなたのコメントで答えるのに非常に近かった-

環境変数とのファイルの関連付けを変更できる場合 - それは役に立ちますが、可能ではないようです。

可能です。REG_EXPAND_SZキーの値でレジストリ キーのタイプと環境変数を使用するだけです。たとえば、 キー
%python_home%\python %1 %*
(Default)値として配置し、その値をに設定すると、Python ファイルを開く Python を定義できます。環境変数を設定することで決定します。もちろん、コマンドラインセッションごとにこれを行うことができます。Windows がレジストリのどこに保存し、どのプログラムで特定のファイル タイプを開くかという質問に対する私の回答を見てください。
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Python.File\shell\open\command
REG_EXPAND_SZpython_home

私が強くお勧めするこの問題を正確に解決するための特別なツールがあると言いました. それはpylauncherと呼ばれます。ドキュメントから:

Windows での Python 用の PEP 397 互換ランチャー。PEP については http://www.python.org/dev/peps/pep-0397/、スクリーンキャストについてはhttp://www.red-dove.com/screencasts/launcher/launcher.htmlを参照 してください。

PATHEXT環境変数に追加すると、 .py拡張子をスキップすることもできます。コマンド ラインから EXE を呼び出すときにどの環境変数が使用されるかという質問を参照してください。

于 2011-09-01T19:17:33.663 に答える
3

assocWindows では、およびコマンドを使用して、コマンド ラインからファイルの関連付けを変更できます (現在、 Windows コマンド リファレンスのPDF ファイルをここftypeからダウンロードできます)。

assoc次のコマンドを使用して、現在 .py ファイルに関連付けられているファイルの種類を確認できます。

> assoc .py
.py=Python.File

その情報を使用して、次のコマンドPython.Fileを使用して、ファイルの種類に現在関連付けられているプログラムを確認できます。ftype

> ftype Python.File
Python.File="C:\Python2.6\python.exe" "%1" %*

を使用して、関連するプログラムftype変更することもできます。

> ftype Python.File="C:\Python2.7\python.exe" "%1" %*
Python.File="C:\Python2.7\python.exe" "%1" %*

この方法で設定された関連付けは、Windows レジストリに保存されるため永続的です。つまり、cmd.exeセッションを終了する前に、必要なものに設定または復元する必要があります。この目的のために、1 つ以上のバッチ ファイルを使用することをお勧めします。

cmd.exeそれ自体はパラメーターを受け入れ/kます。これを使用して、最初に必要なファイルの関連付けを設定するバッチ ファイルを起動時に実行できます。その後、セッションquit.batを終了する前にそれを復元するカスタムを提供することもできます。cmd

于 2011-04-07T19:50:43.030 に答える
1

あなたの最善の策は、おそらくスクリプトで PATH 変数を設定し、python script.py. ファイルの関連付けはグローバルであり、プロセス間で共有されます。環境変数はプロセスに対してローカルであるため、このソリューションをお勧めします。

于 2011-04-08T06:15:40.903 に答える
0

Windows set コマンドを使用して一時的な関連付けを設定できます。設定は、システム環境変数にアタッチされていない限り、シェルが実行する限り持続します。

于 2011-04-07T14:56:52.027 に答える