الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف تنشئ بيئات تطوير معزولة لمشروعك عبر virtualenv

بدأه ahmed_youssef في 26 أبريل 2013 · 4 رد · 1,098 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
كتبت مشروع ب 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

 

الآن بعض العمل

[striky@localhost mywspace]$ virtualenv sniply

New python executable in sniply/bin/python

Installing setuptools............done.

Installing pip...............done.

[striky@localhost mywspace]$ cd sn

snapboard-read-only/ sniply/              

[striky@localhost mywspace]$ cd sniply/

قمنا بإنشاء بيئة عمل جديدة بإسم sniply -المفترض إسم مشروع مشابه ل gist ويقوم بتصغير الرابط كذلك- عبر الأمر virtualenv 

لاحظ وجود setuptools إفتراضيا إذا أردت أن تستخدم distribute فقم بتمرير معامل --distribute للأمر virtualenv او قم بتعريف متغير 

$export VIRTUALENV_DISTRIBUTE=true

 

فلنظر لهيكلية البيئة التي تم إنشائها

 

[striky@localhost sniply]$ tree .

.

├── bin

│   ├── activate

│   ├── activate.csh

│   ├── activate.fish

│   ├── activate_this.py

│   ├── easy_install

│   ├── easy_install-2.7

│   ├── pip

│   ├── pip-2.7

│   └── python

├── include

│   └── python2.7 -> /usr/include/python2.7

├── lib

│   └── python2.7

│       ├── _abcoll.py -> /usr/lib64/python2.7/_abcoll.py

│       ├── _abcoll.pyc

│       ├── abc.py -> /usr/lib64/python2.7/abc.py

│       ├── abc.pyc

│       ├── codecs.py -> /usr/lib64/python2.7/codecs.py

│       ├── codecs.pyc

│       ├── config -> /usr/lib64/python2.7/config

│       ├── copy_reg.py -> /usr/lib64/python2.7/copy_reg.py

│       ├── copy_reg.pyc

│       ├── distutils

│       │   ├── distutils.cfg

│       │   ├── __init__.py

│       │   └── __init__.pyc

│       ├── encodings -> /usr/lib64/python2.7/encodings

│       ├── fnmatch.py -> /usr/lib64/python2.7/fnmatch.py

│       ├── fnmatch.pyc

│       ├── genericpath.py -> /usr/lib64/python2.7/genericpath.py

│       ├── genericpath.pyc

│       ├── lib-dynload -> /usr/lib64/python2.7/lib-dynload

│       ├── linecache.py -> /usr/lib64/python2.7/linecache.py

│       ├── linecache.pyc

│       ├── locale.py -> /usr/lib64/python2.7/locale.py

│       ├── no-global-site-packages.txt

│       ├── ntpath.py -> /usr/lib64/python2.7/ntpath.py

│       ├── orig-prefix.txt

│       ├── os.py -> /usr/lib64/python2.7/os.py

│       ├── os.pyc

│       ├── posixpath.py -> /usr/lib64/python2.7/posixpath.py

│       ├── posixpath.pyc

│       ├── re.py -> /usr/lib64/python2.7/re.py

│       ├── re.pyc

│       ├── site-packages

│       │   ├── easy-install.pth

│       │   ├── pip-1.2.1-py2.7.egg

│       │   │   ├── EGG-INFO

│       │   │   │   ├── dependency_links.txt

│       │   │   │   ├── entry_points.txt

│       │   │   │   ├── not-zip-safe

│       │   │   │   ├── PKG-INFO

│       │   │   │   ├── SOURCES.txt

│       │   │   │   └── top_level.txt

│       │   │   └── pip

│       │   │       ├── backwardcompat.py

│       │   │       ├── backwardcompat.pyc

│       │   │       ├── basecommand.py

│       │   │       ├── basecommand.pyc

│       │   │       ├── baseparser.py

│       │   │       ├── baseparser.pyc

│       │   │       ├── commands

│       │   │       │   ├── bundle.py

│       │   │       │   ├── bundle.pyc

│       │   │       │   ├── completion.py

│       │   │       │   ├── completion.pyc

│       │   │       │   ├── freeze.py

│       │   │       │   ├── freeze.pyc

│       │   │       │   ├── help.py

│       │   │       │   ├── help.pyc

│       │   │       │   ├── __init__.py

│       │   │       │   ├── __init__.pyc

│       │   │       │   ├── install.py

│       │   │       │   ├── install.pyc

│       │   │       │   ├── search.py

│       │   │       │   ├── search.pyc

│       │   │       │   ├── uninstall.py

│       │   │       │   ├── uninstall.pyc

│       │   │       │   ├── unzip.py

│       │   │       │   ├── unzip.pyc

│       │   │       │   ├── zip.py

│       │   │       │   └── zip.pyc

│       │   │       ├── download.py

│       │   │       ├── download.pyc

│       │   │       ├── exceptions.py

│       │   │       ├── exceptions.pyc

│       │   │       ├── index.py

│       │   │       ├── index.pyc

│       │   │       ├── __init__.py

│       │   │       ├── __init__.pyc

│       │   │       ├── locations.py

│       │   │       ├── locations.pyc

│       │   │       ├── log.py

│       │   │       ├── log.pyc

│       │   │       ├── __main__.py

│       │   │       ├── __main__.pyc

│       │   │       ├── req.py

│       │   │       ├── req.pyc

│       │   │       ├── runner.py

│       │   │       ├── runner.pyc

│       │   │       ├── status_codes.py

│       │   │       ├── status_codes.pyc

│       │   │       ├── util.py

│       │   │       ├── util.pyc

│       │   │       └── vcs

│       │   │           ├── bazaar.py

│       │   │           ├── bazaar.pyc

│       │   │           ├── git.py

│       │   │           ├── git.pyc

│       │   │           ├── __init__.py

│       │   │           ├── __init__.pyc

│       │   │           ├── mercurial.py

│       │   │           ├── mercurial.pyc

│       │   │           ├── subversion.py

│       │   │           └── subversion.pyc

│       │   ├── setuptools-0.6c11-py2.7.egg

│       │   └── setuptools.pth

│       ├── site.py

│       ├── site.pyc

│       ├── sre_compile.py -> /usr/lib64/python2.7/sre_compile.py

│       ├── sre_compile.pyc

│       ├── sre_constants.py -> /usr/lib64/python2.7/sre_constants.py

│       ├── sre_constants.pyc

│       ├── sre_parse.py -> /usr/lib64/python2.7/sre_parse.py

│       ├── sre_parse.pyc

│       ├── sre.py -> /usr/lib64/python2.7/sre.py

│       ├── stat.py -> /usr/lib64/python2.7/stat.py

│       ├── stat.pyc

│       ├── types.py -> /usr/lib64/python2.7/types.py

│       ├── types.pyc

│       ├── UserDict.py -> /usr/lib64/python2.7/UserDict.py

│       ├── UserDict.pyc

│       ├── warnings.py -> /usr/lib64/python2.7/warnings.py

│       ├── warnings.pyc

│       ├── _weakrefset.py -> /usr/lib64/python2.7/_weakrefset.py

│       └── _weakrefset.pyc

└── lib64 -> ./lib

 

16 directories, 122 files

 

 

الآن ماذا ؟

كما ترى في مجلد bin يوجد عدة ملفات تنفيذية مثل activate, easy_install, pip, python

فكما خمنت قم بتفعيل تلك البيئة الإفتراضية المعزولة عبر activate

 

[striky@localhost sniply]$ source bin/activate

(sniply)[striky@localhost sniply]$

لاحظ هنا وجود كلمة (sinply) اما مؤشر المستخدم لتشير إلى أنك داخل البيئة الإفتراضية sniply

 

للخرو ج من بيئة sniply بكل بساطة إستدعي الأمر deactivate

(sniply)[striky@localhost sniply]$ deactivate 

[striky@localhost sniply]$

 

قم بتنصيب ماتشاء 

(sniply)[striky@localhost sniply]$ pip install flask

مثلا سأقوم بتنصيب flask لكون النسخة التي تم تنصيبها على النظام قديمة قليلا

 

 

الناتج

(sniply)[striky@localhost sniply]$ ls lib64/python2.7/site-packages/

easy-install.pth           pip-1.2.1-py2.7.egg

flask                      setuptools-0.6c11-py2.7.egg

Flask-0.9-py2.7.egg-info   setuptools.pth

jinja2                     werkzeug

Jinja2-2.6-py2.7.egg-info  Werkzeug-0.8.3-py2.7.egg-info

لاحظ أن تم تنصيب flask و الحزم المتعلقة بها على مستوى بيئة sniply وليست على مستوى النظام

لنا لقاء آخر عن virtualenvwrapper 

 

 

3
(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#2

منذ مده طويله لم أشاهد موضوع رائع كهذا لبايثون

 

شكرا استادي على مجهوداتك وبصماتك الدائمه في توطين  البايثون عربيا

 

ذكرت طريقة تشغيل البيئة ولكن كيف أجعل من سكربتي يستفيد من بيئه معينه اي كيف أشغله بالبيئة الفلانيه ؟

 

هل تشغيل السكربت بهذه الطريقه يكون أكثر امانا على النظام ؟

 

هل سيفتقر السكربت لبعض المكتبات الأساسيه مثل sy وهل يمكن تضمينها أن كانت تحظر؟

 

سؤال خارجي كيف يمكنني تشغيل سكربت بايثون بما يعرف بصندوق الرمل؟

 

 

وشكرا استادي

1
#3

حياك الله

 

 

 

اقتباس

ذكرت طريقة تشغيل البيئة ولكن كيف أجعل من سكربتي يستفيد من بيئه معينه اي كيف أشغله بالبيئة الفلانيه ؟

 

 

 

فقط كل ماعليك أن تنشئ السكربت او الباكج أو ماتريد كالتالي مثلا

 
(pastebin)[striky@localhost pastebin]$ python hello.py 
(pastebin)[striky@localhost pastebin]$ vim hello.py 
(pastebin)[striky@localhost pastebin]$ python hello.py 
from pastebin

 

اقتباس


هل تشغيل السكربت بهذه الطريقه يكون أكثر امانا على النظام ؟

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

 

اقتباس

هل سيفتقر السكربت لبعض المكتبات الأساسيه مثل sy وهل يمكن تضمينها أن كانت تحظر؟

ﻷ ، أما إذا تقصد المكتبات الموجودة في site-packages 

فبيئة fullenv تم إنشائها بمعامل --system-site-packages

http://www.virtualenv.org/en/latest/#the-system-site-packages-option

 

ولكن لاأرى لها فائدة حقيقة أين العزل والهدف الأصلي :) ؟

 
(fullenv)[striky@localhost python2.7]$ python
Python 2.7.3 (default, Jul 24 2012, 10:05:38) 
[GCC 4.7.0 20120507 (Red Hat 4.7.0-5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import twisted
>>> twisted.__file__
'/usr/lib64/python2.7/site-packages/twisted/__init__.pyc'
>>> 
KeyboardInterrupt
>>> 
[1]+  Stopped                 python
(fullenv)[striky@localhost python2.7]$ workon pastebin
(pastebin)[striky@localhost python2.7]$ python
Python 2.7.3 (default, Jul 24 2012, 10:05:38) 
[GCC 4.7.0 20120507 (Red Hat 4.7.0-5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import twisted
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named twisted

 

اقتباس

سؤال خارجي كيف يمكنني تشغيل سكربت بايثون بما يعرف بصندوق الرمل؟

لم اتعامل معها من قبل ربما pypy -c يكون ماتحتاج ؟ 

https://pypi.python.org/pypi/pysandbox/

 

بالتوفيق

1
(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#4

السلام عليكم : جذبني انتباه على بيئة fullenv

 

ماهذه البيئة؟

salah.jpg

#5

عليكم السلام

 

هي بيئة تتيح الوصول للملفات المنصبة على مستوى النظام (وهذا ضد الهدف من virtualenv)

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…