私はbash
シェルとしてMacOSXを使用しています。このように作成されたシンボリックリンクがあります。
ln -s /usr/bin/python python2
python2を使用するパッケージがあり、現在の作業ディレクトリに/usr/bin/python
実際にpython2であるシンボルリンクを作成したい。python2
コマンドラインからを実行すると、次のエラーが表示されます。
python2: realpath couldn't resolve "/usr/bin/python2"
しかし、このように呼び出すと./python2
、パスが正しく解決されます。私PATH
は.
それを持っています。実際、テスト用に変更するだけ.
で済みます。
どうすれば解決できますか?ありがとう!
環境
下記の提案された解決策の多くは私にはうまくいきません。私は、人々がテキストの海にdrれないように、できるだけ集中して簡潔に私の質問を蒸留しようとしましたが、明らかに、より多くの背景を提供する必要があります。
gitからクローンを作成したパッケージで開発しようとしています。元のパッケージはgit-multimail
、Linuxの一部のバリアントで開発されました(Ubuntuを推測しています)。MacOSXで可能な限り変更を加えずに使用できるように変更しようとしています。提案されたソリューションのいくつかが理想的ではない理由はここにあります:
ルートとして
python2
、/ usr / bin /にシンボリックリンクを作成します。私はこれを必要としないソリューションを探しています。これは最初は明らかなオプションでしたが、ホストシステムを可能な限り変更しないソリューションが必要です。これが、現在の作業ディレクトリに一時シンボリックリンクを作成し、CWD(つまり.
)をパスに追加し、終了時にこれを破棄する(つまり、シンボリックリンク)理由でした。ラッパースクリプトを作成して、既存のPythonでPythonスクリプトを呼び出します。これに関する問題は、正しい実行環境を見つけるためにshebangに応じて、テストスイートの多くが実際のscript_filesを実行可能ファイルとして使用することです。これは、テストスイートをかなり編集することを意味します。このコンテキストでは(テストフレームワークのスニペットについては以下を参照)、すべての
.py
ファイルにラッパーを追加する必要があります。さらに、ユーザー/開発者は、使用しているシステムに応じてパッケージを使用するためのさまざまなルールを認識する必要があります(つまり、MacOSXでは、ラッパー経由で呼び出すか、明示的に呼び出すことなくpythonファイルを使用しないでください/usr/bin/python file.py
)。#! /bin/sh D=$(cd $(dirname "$0") && pwd) MULTIMAIL="$D/../git-multimail/git_multimail.py" POST_RECEIVE="$D/../git-multimail/post-receive" TESTREPO=$("$D/create-test-repo") HOME="$D" XDG_CONFIG_HOME="$D" GIT_CONFIG_NOSYSTEM=1 export HOME XDG_CONFIG_HOME GIT_CONFIG_NOSYSTEM cd $TESTREPO test_email() { REFNAME="$1" OLDREV="$2" NEWREV="$3" echo "$OLDREV" "$NEWREV" "$REFNAME" | USER=pushuser "$MULTIMAIL" }
すべての
python2
参照をに変更していますpython
。READMEはこれを提案しますが、システムは変更を新しいバージョンと見なし、実際には(意味的には)変更されていないため、バージョン管理を事実上無効にします。
私は(3)を使用していますが、より良い解決策を見つけようとしています。私はこれが単なる方法であることを受け入れるつもりです(つまり/usr/bin/python
、テストスイートと実際のフレームワークに多くの変更を加えることなく、ポータブルで控えめな「python2」を指す適切な方法はありません)
git-multimail.py
それがある#!/usr/bin/env python2
ので、これを行うには(比較的)簡単な方法があります。
ln -s /usr/bin/python2.7 /usr/local/bin/python2
しました
ln -s /usr/bin/python /usr/bin/python2