سؤال

مشكلتي هي الحصول على manage.py syncdb لتشغيل داخل VirtualEnV.

كان يعمل بشكل جيد عند نقطة واحدة ، ولكن يبدو أنه قد كسر في وقت ما عندما قمت بتثبيت جنوبًا وقمت بتحديث PIP وتوزيعه.

على أي حال ، عندما يتم تنشيط VirtualEnv ، يمكنني استيراد التطبيقات بشكل جيد داخل المترجم التفاعلي. يعمل من خلال mod_wsgi ، يتم استيراد التطبيقات أيضًا ، ويمكن تشغيل الموقع.

عندما أقوم بتشغيل manage.py syncdb ، فإنه يفشل في العثور على أي تطبيق في installed_apps الموجود في VirtualEnv الخاص بي. إنها تلتقط التطبيقات التي تم تثبيتها بشكل جيد ، لكنها تفشل عندما تحاول استيراد تطبيقات VirtualEnv فقط.

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

المحلول

مرحبًا ، هذا سؤال قديم ، لكنه رأى أنه لم يتم الإجابة عليه. لست متأكدًا مما تحاول القيام به ، ولكن هناك في الأساس وضعين يمكنك استخدام VirtualEnv ،

  1. للتنمية ، لإنشاء بيئات قائمة بذاتها
  2. للنشر ، لإنشاء بيئات قائمة بذاتها

في الحالة الأولى ، تحتاج إلى تنشيط 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top