Kabuğum bash
olarak MacOSX kullanıyorum . Ben böyle oluşturulan sembolik bir bağ var:
ln -s /usr/bin/python python2
Python2 kullanan bir paket var ve geçerli çalışma /usr/bin/python
dizinimde aslında python2 olan bir sembol bağlantısı oluşturmak istiyorum . Ben ne zaman python2
komut satırından bu hatayı alıyorum:
python2: realpath couldn't resolve "/usr/bin/python2"
Ancak bu şekilde çağırmak ./python2
yolu doğru bir şekilde çözer. İçimde PATH
var .
. Aslında, test için, sadece .
içinde olacak şekilde değiştirdim.
Bunu nasıl çözerim? Teşekkürler!
bağlam
Aşağıdaki önerilen çözümlerden bazıları benim için çalışmaz. İnsanları bir metin denizinde boğulmamak için sorumu olabildiğince odaklanmış ve kısa bir şekilde damıtmaya çalıştım, ancak açıkça daha fazla arka plan sağlamam gerekiyor.
Git'ten klonladığım bir paket üzerinde geliştirmeye çalışıyorum. Orijinal paket, git-multimail
/ Linux'un bazı varyantlarında geliştirildi / geliştirildi (sanırım Ubuntu). Mümkün olduğunca az değişiklikle MacOSX üzerinde ve test paketini kullanabilmek için değiştirmeye çalışıyorum. Önerilen çözümlerden bazıları neden ideal değil:
Kök olarak,
python2
/ usr / bin / dizininde bir sembolik bağlantı oluşturun . Bunu gerektirmeyen bir çözüm arıyorum. Bu başlangıçta bariz bir seçimdi, ancak ana bilgisayar sistemini olabildiğince az değiştiren bir çözüm istiyorum. Bu nedenle, geçerli çalışma dizininde geçici bir symlink oluşturmak, CWD'yi (yani.
) yoluma eklemek ve bitirdiğimde (yani symlink) yok etmek istedim.Mevcut python ile python komut dosyasını çağırmak için bir sarıcı komut dosyası oluşturun. Buradaki sorun, test paketinin büyük bir kısmının, doğru yürütme ortamını bulmak için shebang'a bağlı olarak gerçek script_files dosyalarını yürütülebilir olarak kullanmasıdır. Bu, test paketini önemli ölçüde düzenlemek anlamına gelir. Bu bağlamda, (test çerçevesinin bir snippet'i için aşağıya bakın), her
.py
dosya için bir sarıcı eklemem gerekir ; ayrıca kullanıcı / geliştirici, hangi sistemde bulunduklarına bağlı olarak paketi kullanmak için farklı kuralların farkında olmalıdır (örn. MacOSX'te, python dosyalarını sarmalayıcı aracılığıyla çağırmadan veya açıkça çağırmadan kullanmadığınızdan emin olun/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" }
İle ilgili tüm
python2
referanslar değiştiriliyorpython
. README bunu önerir, ancak sistem değişikliği (anlamsal olarak) olmadığında sistem değişikliği yeni sürüm olarak gördüğünden, bu durum sürüm kontrolünü etkili bir şekilde işe yaramaz hale getirir.
(3) kullanıyorum ama daha iyi bir çözüm bulmaya çalışıyorum. Bu şeylerin sadece yol olduğunu kabul etmek istiyorum (yani 'python2' /usr/bin/python
test paketi ve gerçek çerçeve çok fazla değişiklik olmadan taşınabilir ve mütevazi işaret için uygun bir yolu yoktur ).
git-multimail.py
öyle #!/usr/bin/env python2
, yani bunu yapmak için (nispeten) basit bir yolu var.
ln -s /usr/bin/python2.7 /usr/local/bin/python2
yaramadı
ln -s /usr/bin/python /usr/bin/python2