Virtualenv: - relocatable لا يشير تنشيط البرنامج النصي إلى المسار الصحيح

تم إنشاؤها على ١٤ مارس ٢٠١١  ·  14تعليقات  ·  مصدر: pypa/virtualenv

باستخدام Ubuntu 10.04 ، يعمل --relocatable إذا استدعت بشكل مباشر ثنائي Python أو البرامج النصية التي تم إنشاؤها بواسطة setuptools. ومع ذلك ، لا يزال bin / Activ يعكس المسار القديم:

> pwd
/home/jhammel
> virtualenv.py foo
New python executable in foo/bin/python
Installing setuptools............done.
> virtualenv.py --relocatable foo
Making script foo/bin/easy_install relative
Making script foo/bin/easy_install-2.6 relative
Making script foo/bin/pip relative
> mv foo bar
> cd bar
> . bin/activate
(foo)> echo $VIRTUAL_ENV
/home/jhammel/foo
(foo)> which python
/usr/bin/python
(foo)>

هذا بسبب تعيين VIRTUAL_ENV على مسار مطلق في البرنامج النصي. بدلاً من ذلك ، يجب أن يكون هذا نسبيًا عندما يتم استدعاء relocatable.

نظرًا لأنه يجب تحديد مصدر نص التنشيط ، يكون الحصول على المسار أكثر تعقيدًا من مجرد (على سبيل المثال) dirname $0 . يبدو أن ما يلي يعمل في باش:

command=$(history 1) # this should go at the top of the file
parent_path() {
DIRECTORY=$(dirname ${!#})
cd $DIRECTORY/..
pwd
}
VIRTUAL_ENV=$(parent_path $command)

إذا كان هذا يلقى موافقتك ، إيان ، يسعدني أن أكتب تصحيحًا.


bug

ال 14 كومينتر

آسف للتنسيق السيئ .... خدعني bitbucket مرة أخرى :(


Original Comment By: Jeff Hammel

ويمكن استخدام %~dp0% في بيئة windows للحصول على المسار إلى ملف
البرنامج النصي الحالي ، من أجل activ.bat.


Original Comment By: Sylvain Prat

أعتقد أنها فكرة جيدة ، سيكون التصحيح رائعًا.


Original Comment By: Jannis Leidel
  • المحتوى الذي تم تغييره.

Original Comment By: Jannis Leidel

إليك نسخة أفضل من bash:

VIRTUAL_ENV=$(cd $(dirname "$BASH_SOURCE"); dirname `pwd`)

و (t) csh:

set sourced=($_)

set scriptdir=`dirname "$sourced[2]"`

set scriptpwd=`cd "$scriptdir"; pwd`

setenv VIRTUAL_ENV `dirname "$scriptpwd"`

Original Comment By: Anonymous

هذا ما أستخدمه:

VIRTUAL_ENV="$(dirname $(dirname $(readlink --canonicalize --no-newline

$ BASH_SOURCE))) "

أو مع الخيارات القصيرة

VIRTUAL_ENV="$(dirname $(dirname $(readlink -f -n $BASH_SOURCE)))"

Original Comment By: Matteo Bertini

وخيار لمن لا يزالون يستخدمون tcsh:

تعيين المصدر = ($ _)
تعيين scriptdir = dirname "$sourced[2]"
تعيين scriptpwd = cd "$scriptdir"; pwd
setenv VIRTUAL_ENV dirname "$scriptpwd"

لقد قدمت طلب سحب لهذا التغيير (والذي ينفذ سكربت bash فقط):
https://github.com/pypa/virtualenv/pull/143

بالنسبة لنظام التشغيل windows ، في ACTIVATE_BAT يمكنك استبدال:

set VIRTUAL_ENV=__VIRTUAL_ENV__

مع:

pushd %~dp0..
set VIRTUAL_ENV=%CD%
popd

هذا أفضل من مجرد تعيينه على %~dp0.. مباشرة حيث ينتهي بك الأمر بنفس المسار المطلق الذي كنت ستفعله بدون التغيير ، لكنه قابل للنقل.

إضافة مرجع إلى الإصدار الأحدث رقم 1067 المتعلق بهذا للمساعدة في توحيد الجهود لحل هذه المشكلة القديمة التي دامت نصف عقد من خلال نصوص التنشيط النصية.

هذا ما أستخدمه:

VIRTUAL_ENV="$(dirname $(dirname $(readlink --canonicalize --no-newline

$ BASH_SOURCE))) "

أو مع الخيارات القصيرة

VIRTUAL_ENV="$(dirname $(dirname $(readlink -f -n $BASH_SOURCE)))"

قد يكون استخدام readlink مشكلة ، لأنه يحتوي على خيارات سطر أوامر مختلفة بين Linux و BSD / macOS ونكهات أخرى محتملة من Unix.

@ adah1972 ، الإصدار رقم 1067 هو الأحدث. هذا الإصدار من عام 2012 ، رقم 1067 من عام 2017.

arizvisa شكرا. لقد علقت في # 1067 أيضًا.

تم وضع علامة على هذه المشكلة تلقائيًا على أنها قديمة نظرًا لعدم وجود نشاط حديث لها. سيتم إغلاقه إذا لم يحدث أي نشاط آخر. فقط أضف تعليقًا إذا كنت تريد إبقائه مفتوحًا. شكرا لمساهماتكم.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات