2010-08-24 61 views
6

Vấn đề của tôi là trong việc quản lý.py.py syncdb để chạy trong virtualenv.Django không tìm thấy ứng dụng trong virtualenv khi sử dụng manage.py syncdb

Nó đã hoạt động tốt tại một thời điểm, nhưng dường như đã bị hỏng đôi khi xung quanh khi tôi cài đặt Nam và cập nhật pip và phân phối.

Dù sao, khi virtualenv được kích hoạt, tôi có thể nhập các ứng dụng tốt trong trình thông dịch tương tác. Chạy qua mod_wsgi, các ứng dụng cũng được nhập và trang web có thể chạy.

Khi tôi chạy manage.py syncdb, nó không tìm thấy bất kỳ ứng dụng nào trong INSTALLED_APPS nằm trong virtualenv của tôi. Nó chọn lên các ứng dụng được cài đặt hệ thống tốt, nhưng không thành công khi nó cố gắng nhập các ứng dụng ảo chỉ.

+1

là gì dòng ở trên cùng của manage.py mà bạn đang chạy? Các lệnh chính xác mà bạn sử dụng để chạy trình thông dịch tương tác Python và manage.py khi virtualenv của bạn được kích hoạt là gì? –

Trả lời

5

Xin chào Đây là một câu hỏi cũ, nhưng thấy nó không được trả lời. Không chắc chắn những gì bạn đang cố gắng để làm, nhưng về cơ bản có hai chế độ bạn có thể sử dụng virtualenv,

  1. Đối với phát triển, để tạo ra môi trường khép kín
  2. Đối với việc triển khai, để tạo ra môi trường khép kín

Trong trường hợp đầu tiên, trước tiên bạn cần kích hoạt virtualenv của bạn với venv/bin/activation nguồn, khi bạn triển khai, bạn cần đảm bảo rằng virtualenv được kích hoạt cho mã trang web của bạn. Cá nhân tôi thích cách tiếp cận sau để đảm bảo đường dẫn của bạn được đặt chính xác. (Tôi cũng thêm video này vào manage.py của tôi khi thực hiện phát triển, vì vậy tôi không phải lo lắng về kích hoạt môi trường đầu tiên.

Modified 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) 

này hoạt động, do làm thế nào tôi cấu trúc của tôi dự án, bạn sẽ phải thay đổi nó để cấu trúc thư mục của bạn dự án của tôi được cấu trúc như sau:.

TopLevelDir 
| 
|- Project DIR 
|- venv 
|- requirements 
|- deployment configs 
3

tôi có một giải pháp đơn giản để

Chỉ cần ra mắt này manage.py từ con trăn trong thùng của môi trường ảo của bạn.

Vì vậy, nói python của bạn ở đây/home/tom/môi trường/my_env/bin/python bạn có thể khởi động manage.py như vậy:

/home/tom/môi trường/my_env/bin/python manage.py syncdb

sau đó chỉ cần tạo ra một liên kết tượng trưng đến python môi trường ảo bên trong dự án django của bạn và gọi nó là env_python sau đó bạn có thể làm điều này:

./env_python syncdb manage.py các nội dung của công việc

Các vấn đề liên quan