لا يجد Django تطبيقات في VirtualEnv عند استخدام Manage.py syncdb
-
01-10-2019 - |
سؤال
مشكلتي هي الحصول على manage.py syncdb لتشغيل داخل VirtualEnV.
كان يعمل بشكل جيد عند نقطة واحدة ، ولكن يبدو أنه قد كسر في وقت ما عندما قمت بتثبيت جنوبًا وقمت بتحديث PIP وتوزيعه.
على أي حال ، عندما يتم تنشيط VirtualEnv ، يمكنني استيراد التطبيقات بشكل جيد داخل المترجم التفاعلي. يعمل من خلال mod_wsgi ، يتم استيراد التطبيقات أيضًا ، ويمكن تشغيل الموقع.
عندما أقوم بتشغيل manage.py syncdb ، فإنه يفشل في العثور على أي تطبيق في installed_apps الموجود في VirtualEnv الخاص بي. إنها تلتقط التطبيقات التي تم تثبيتها بشكل جيد ، لكنها تفشل عندما تحاول استيراد تطبيقات VirtualEnv فقط.
المحلول
مرحبًا ، هذا سؤال قديم ، لكنه رأى أنه لم يتم الإجابة عليه. لست متأكدًا مما تحاول القيام به ، ولكن هناك في الأساس وضعين يمكنك استخدام VirtualEnv ،
- للتنمية ، لإنشاء بيئات قائمة بذاتها
- للنشر ، لإنشاء بيئات قائمة بذاتها
في الحالة الأولى ، تحتاج إلى تنشيط VirtualEnv أولاً باستخدام Source VenV/Bin/Activate ، لأنه عند النشر ، تحتاج إلى التأكد من تنشيط VirtualEnv لرمز موقع الويب الخاص بك. أنا شخصياً أفضل النهج التالي لضمان ضبط مسارك بشكل صحيح. (أقوم أيضًا بإضافة هذا إلى Manage.py عند القيام بالتطور ، لذلك لا داعي للقلق بشأن تنشيط البيئة أولاً.
manage.py manage.py
#!/usr/bin/env python
import os.path
# Cater for Virtual env, add to sys.path
pwd = os.path.abspath(os.path.dirname(__file__))
project = os.path.basename(pwd)
new_path = pwd.strip(project)
activate_this = os.path.join(new_path,'venv','bin','activate_this.py')
execfile(activate_this, dict(__file__=activate_this))
from django.core.management import execute_manager
try:
import settings # Assumed to be in the same directory.
except ImportError:
import sys
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
sys.exit(1)
if __name__ == "__main__":
execute_manager(settings)
هذا يعمل ، بسبب كيفية تنشيط مشاريعي ، سيكون عليك تغييرها إلى هيكل الدليل الخاص بك. مشاريعي منظمة على النحو التالي:
TopLevelDir
|
|- Project DIR
|- venv
|- requirements
|- deployment configs
نصائح أخرى
لدي حل بسيط لهذا
ما عليك سوى إطلاق manage.py من Python في صندوق بيئتك الافتراضية.
لذلك قل أن بيثون الخاص بك هنا/الصفحة الرئيسية/توم/بيئات/my_env/bin/python يمكنك تشغيل الإدارة مثل ذلك:
/الصفحة الرئيسية/توم/بيئات/my_env/bin/python manage.py syncdb
ثم فقط قم بإنشاء ترابط إلى بيثون البيئة الافتراضية داخل مشروع Django الخاص بك واتصل به Env_python ثم يمكنك القيام بذلك:
./env_python manage.py syncdb