سؤال

أنا أكتب برنامج نصي قذيفة قائم على Python ل BeilerPlate A Django App مع VirtualEnv و PIP والنسيج. يجب أن يكون واضحا بما فيه الكفاية، ولكن يبدو أنني غير قادر على تنشيط أو تشغيل الأوامر في VirtualEnv من خلال البرنامج النصي Shell.

os.system('virtualenv %s --no-site-packages' % project_name)
os.system('source %s/bin/activate' % project_name)
os.system('easy_install pip')

عند تشغيل، هذه الأخطاء خارج:

$ startproject+ -s false sample
New python executable in sample/bin/python
Installing setuptools............done.
/testing
Searching for pip
Best match: pip 0.4
Processing pip-0.4-py2.6.egg
pip 0.4 is already the active version in easy-install.pth
Installing pip script to /usr/local/bin
error: /usr/local/bin/pip: Permission denied

من الواضح أن source لا يتم تشغيل الخط، ولكن لماذا؟ هل هي مشكلة التزامن / الخيوط، أو شيء أعمق مع Virtualenv؟

شكرا!

هل كانت مفيدة؟

المحلول

كل os.system اتصل بإنشاء عملية جديدة. ستحتاج إلى ضمان أن activate و ال easy_install يتم تشغيلها في نفسه os.system أو subprocess يتصل.

نصائح أخرى

يعمل كل مكالمة على OS.System الأمر في ضربة ضوئية جديدة، والتي تحتوي على نفس الخصائص مثل عملية الثعبان الأصلية.

حاول وضع الأوامر في سلسلة واحدة مفصولة من الفاصلة منقوطة.

فقط لا تستخدم "تنشيط المصدر" على الإطلاق. لا يفعل شيئا سوى تغيير مسار Shell الخاص بك لوضع دليل Bin VirtualEnv أولا. أفترض أن البرنامج النصي يعرف دليل Virtualenv الذي أنشأته للتو؛ كل ما عليك فعله هو الاتصال _virtualenv_dir_ / bin / easy_install بواسطة المسار الكامل. أو _virtualenv_dir_ / bin / python لتشغيل أي برنامج نصي python آخر داخل VirtualEnv.

يمكنك أيضا تثبيت VirtualenvWrapper، واستخدم هوك postmkvirtualenv. أستخدمه لإحضار نسخ طازجة من PIP و IPYTHON إلى VirtualEnvs أقوم بإنشائه (كما لا أريد استخدام نظامي Ipython). أستخدمها أيضا لنسخ Pythonw في Virtualenv، وإلا لن تعمل الأشياء القائمة على WX. يشبه هذا:

easy_install pip
pip install -I ipython
cd ~/bin
python install_pythonw.py ${VIRTUAL_ENV}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top