لتجربة أفضل في القراءة فضلا تابع الموضوع هنا
كتبت مشروع ب Django 1.0 وسارت الأمور جيدا ولكن أحببت أن تكتب مشروع آخر ب Django 1.5 ويوجد تغييرات كثيرة ، فقد تقوم بعمل عدة أشياء تعتمد على إصدارات مختلفة من نفس الحزمة وهنا تحدث المشكلة. كيف يمكن تنصيب Django 1.0 و Django 1.5 في نفس الوقت ؟
أو حتى غير متاح لك عبر الصلاحيات إضافة حزم على مستوى النظام ؟
system-wide installation
المقصود بها هو التنصيب لتصبح مع المكتبات المعلومة على مستوى النظام ، ستجدها على سبيل المثال في مسار مثل
/usr/lib64/python/site-packages
وهذا مايتم فعله عندما تستخدم easy_install او pip
كالعادة يوجد لدينا حل ذكي وهو virtualenv وهي آداة تقوم بإنشاء بيئات مستقلة قائمة بذاتها لبايثون
أذهب الآن إلى سطر الأوامر وقم بتنفيذ
easy_install virtualenv
easy_install pip
الآن بعض العمل
<br />[striky@localhost mywspace]$ virtualenv sniply<br />New python executable in sniply/bin/python<br />Installing setuptools............done.<br />Installing pip...............done.<br />[striky@localhost mywspace]$ cd sn<br />snapboard-read-only/ sniply/ <br />[striky@localhost mywspace]$ cd sniply/</p><p>
قمنا بإنشاء بيئة عمل جديدة بإسم sniply -المفترض إسم مشروع مشابه ل gist ويقوم بتصغير الرابط كذلك- عبر الأمر virtualenv
لاحظ وجود setuptools إفتراضيا إذا أردت أن تستخدم distribute فقم بتمرير معامل –distribute للأمر virtualenv او قم بتعريف متغير
$export VIRTUALENV_DISTRIBUTE=true
فلنظر لهيكلية البيئة التي تم إنشائها
<br />[striky@localhost sniply]$ tree .<br />.<br />├── bin<br />│ ├── activate<br />│ ├── activate.csh<br />│ ├── activate.fish<br />│ ├── activate_this.py<br />│ ├── easy_install<br />│ ├── easy_install-2.7<br />│ ├── pip<br />│ ├── pip-2.7<br />│ └── python<br />├── include<br />│ └── python2.7 -> /usr/include/python2.7<br />├── lib<br />│ └── python2.7<br />│ ├── _abcoll.py -> /usr/lib64/python2.7/_abcoll.py<br />│ ├── _abcoll.pyc<br />│ ├── abc.py -> /usr/lib64/python2.7/abc.py<br />│ ├── abc.pyc<br />│ ├── codecs.py -> /usr/lib64/python2.7/codecs.py<br />│ ├── codecs.pyc<br />│ ├── config -> /usr/lib64/python2.7/config<br />│ ├── copy_reg.py -> /usr/lib64/python2.7/copy_reg.py<br />│ ├── copy_reg.pyc<br />│ ├── distutils<br />│ │ ├── distutils.cfg<br />│ │ ├── __init__.py<br />│ │ └── __init__.pyc<br />│ ├── encodings -> /usr/lib64/python2.7/encodings<br />│ ├── fnmatch.py -> /usr/lib64/python2.7/fnmatch.py<br />│ ├── fnmatch.pyc<br />│ ├── genericpath.py -> /usr/lib64/python2.7/genericpath.py<br />│ ├── genericpath.pyc<br />│ ├── lib-dynload -> /usr/lib64/python2.7/lib-dynload<br />│ ├── linecache.py -> /usr/lib64/python2.7/linecache.py<br />│ ├── linecache.pyc<br />│ ├── locale.py -> /usr/lib64/python2.7/locale.py<br />│ ├── no-global-site-packages.txt<br />│ ├── ntpath.py -> /usr/lib64/python2.7/ntpath.py<br />│ ├── orig-prefix.txt<br />│ ├── os.py -> /usr/lib64/python2.7/os.py<br />│ ├── os.pyc<br />│ ├── posixpath.py -> /usr/lib64/python2.7/posixpath.py<br />│ ├── posixpath.pyc<br />│ ├── re.py -> /usr/lib64/python2.7/re.py<br />│ ├── re.pyc<br />│ ├── site-packages<br />│ │ ├── easy-install.pth<br />│ │ ├── pip-1.2.1-py2.7.egg<br />│ │ │ ├── EGG-INFO<br />│ │ │ │ ├── dependency_links.txt<br />│ │ │ │ ├── entry_points.txt<br />│ │ │ │ ├── not-zip-safe<br />│ │ │ │ ├── PKG-INFO<br />│ │ │ │ ├── SOURCES.txt<br />│ │ │ │ └── top_level.txt<br />│ │ │ └── pip<br />│ │ │ ├── backwardcompat.py<br />│ │ │ ├── backwardcompat.pyc<br />│ │ │ ├── basecommand.py<br />│ │ │ ├── basecommand.pyc<br />│ │ │ ├── baseparser.py<br />│ │ │ ├── baseparser.pyc<br />│ │ │ ├── commands<br />│ │ │ │ ├── bundle.py<br />│ │ │ │ ├── bundle.pyc<br />│ │ │ │ ├── completion.py<br />│ │ │ │ ├── completion.pyc<br />│ │ │ │ ├── freeze.py<br />│ │ │ │ ├── freeze.pyc<br />│ │ │ │ ├── help.py<br />│ │ │ │ ├── help.pyc<br />│ │ │ │ ├── __init__.py<br />│ │ │ │ ├── __init__.pyc<br />│ │ │ │ ├── install.py<br />│ │ │ │ ├── install.pyc<br />│ │ │ │ ├── search.py<br />│ │ │ │ ├── search.pyc<br />│ │ │ │ ├── uninstall.py<br />│ │ │ │ ├── uninstall.pyc<br />│ │ │ │ ├── unzip.py<br />│ │ │ │ ├── unzip.pyc<br />│ │ │ │ ├── zip.py<br />│ │ │ │ └── zip.pyc<br />│ │ │ ├── download.py<br />│ │ │ ├── download.pyc<br />│ │ │ ├── exceptions.py<br />│ │ │ ├── exceptions.pyc<br />│ │ │ ├── index.py<br />│ │ │ ├── index.pyc<br />│ │ │ ├── __init__.py<br />│ │ │ ├── __init__.pyc<br />│ │ │ ├── locations.py<br />│ │ │ ├── locations.pyc<br />│ │ │ ├── log.py<br />│ │ │ ├── log.pyc<br />│ │ │ ├── __main__.py<br />│ │ │ ├── __main__.pyc<br />│ │ │ ├── req.py<br />│ │ │ ├── req.pyc<br />│ │ │ ├── runner.py<br />│ │ │ ├── runner.pyc<br />│ │ │ ├── status_codes.py<br />│ │ │ ├── status_codes.pyc<br />│ │ │ ├── util.py<br />│ │ │ ├── util.pyc<br />│ │ │ └── vcs<br />│ │ │ ├── bazaar.py<br />│ │ │ ├── bazaar.pyc<br />│ │ │ ├── git.py<br />│ │ │ ├── git.pyc<br />│ │ │ ├── __init__.py<br />│ │ │ ├── __init__.pyc<br />│ │ │ ├── mercurial.py<br />│ │ │ ├── mercurial.pyc<br />│ │ │ ├── subversion.py<br />│ │ │ └── subversion.pyc<br />│ │ ├── setuptools-0.6c11-py2.7.egg<br />│ │ └── setuptools.pth<br />│ ├── site.py<br />│ ├── site.pyc<br />│ ├── sre_compile.py -> /usr/lib64/python2.7/sre_compile.py<br />│ ├── sre_compile.pyc<br />│ ├── sre_constants.py -> /usr/lib64/python2.7/sre_constants.py<br />│ ├── sre_constants.pyc<br />│ ├── sre_parse.py -> /usr/lib64/python2.7/sre_parse.py<br />│ ├── sre_parse.pyc<br />│ ├── sre.py -> /usr/lib64/python2.7/sre.py<br />│ ├── stat.py -> /usr/lib64/python2.7/stat.py<br />│ ├── stat.pyc<br />│ ├── types.py -> /usr/lib64/python2.7/types.py<br />│ ├── types.pyc<br />│ ├── UserDict.py -> /usr/lib64/python2.7/UserDict.py<br />│ ├── UserDict.pyc<br />│ ├── warnings.py -> /usr/lib64/python2.7/warnings.py<br />│ ├── warnings.pyc<br />│ ├── _weakrefset.py -> /usr/lib64/python2.7/_weakrefset.py<br />│ └── _weakrefset.pyc<br />└── lib64 -> ./lib</p><p>16 directories, 122 files</p><p>
الآن ماذا ؟
كما ترى في مجلد bin يوجد عدة ملفات تنفيذية مثل activate, easy_install, pip, python
فكما خمنت قم بتفعيل تلك البيئة الإفتراضية المعزولة عبر activate
<br />[striky@localhost sniply]$ source bin/activate<br />(sniply)[striky@localhost sniply]$</p><p>
لاحظ هنا وجود كلمة (sinply) اما مؤشر المستخدم لتشير إلى أنك داخل البيئة الإفتراضية sniply
للخرو ج من بيئة sniply بكل بساطة إستدعي الأمر deactivate
<br />(sniply)[striky@localhost sniply]$ deactivate <br />[striky@localhost sniply]$</p><p>
قم بتنصيب ماتشاء
<br />(sniply)[striky@localhost sniply]$ pip install flask<br />
مثلا سأقوم بتنصيب flask لكون النسخة التي تم تنصيبها على النظام قديمة قليلا
الناتج
<br />(sniply)[striky@localhost sniply]$ ls lib64/python2.7/site-packages/<br />easy-install.pth pip-1.2.1-py2.7.egg<br />flask setuptools-0.6c11-py2.7.egg<br />Flask-0.9-py2.7.egg-info setuptools.pth<br />jinja2 werkzeug<br />Jinja2-2.6-py2.7.egg-info Werkzeug-0.8.3-py2.7.egg-info</p><p>
لاحظ أن تم تنصيب flask و الحزم المتعلقة بها على مستوى بيئة sniply وليست على مستوى النظام
لنا لقاء آخر عن virtualenvwrapper