我想在API中导入API_script.py中的django设置 设置在Agora.settings中:
这是API中的API_script.py:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Agora.settings")
from django.contrib.auth.models import User
import django
from django.db.models.loading import cache as model_cache
from Profile.models import Profile_User
try :
django.setup()
except :
pass
def check_profile_exist(token):
print(token)
这是我得到的错误:
Traceback (most recent call last):
File "/home/bussiere/WorkspaceSafe/Agora/API/API_script.py", line 3, in <module>
from django.contrib.auth.models import User
File "/usr/local/lib/python3.4/dist-packages/django/contrib/auth/__init__.py", line 7, in <module>
from django.middleware.csrf import rotate_token
File "/usr/local/lib/python3.4/dist-packages/django/middleware/csrf.py", line 14, in <module>
from django.utils.cache import patch_vary_headers
File "/usr/local/lib/python3.4/dist-packages/django/utils/cache.py", line 26, in <module>
from django.core.cache import caches
File "/usr/local/lib/python3.4/dist-packages/django/core/cache/__init__.py", line 34, in <module>
if DEFAULT_CACHE_ALIAS not in settings.CACHES:
File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 48, in __getattr__
self._setup(name)
File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 44, in _setup
self._wrapped = Settings(settings_module)
File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 92, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: No module named 'Agora'
这是我的树文件:
.
├── Agora
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-34.pyc
│ │ ├── settings.cpython-34.pyc
│ │ ├── urls.cpython-34.pyc
│ │ └── wsgi.cpython-34.pyc
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── API
│ ├── admin.py
│ ├── API_script.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ └── __init__.cpython-34.pyc
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-34.pyc
│ │ ├── API_script.cpython-34.pyc
│ │ ├── __init__.cpython-34.pyc
│ │ ├── models.cpython-34.pyc
│ │ └── views.cpython-34.pyc
│ ├── tests.py
│ ├── unit_test.py
│ └── views.py
├── Contact
│ ├── admin.py
│ ├── __init__.py
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-34.pyc
│ │ ├── __init__.cpython-34.pyc
│ │ └── models.cpython-34.pyc
│ ├── tests.py
│ └── views.py
├── Dockerfile
├── generateadm.py
├── IMG_20150928_105102.jpg
├── __init__.py
├── manage.py
├── Message
│ ├── admin.py
│ ├── __init__.py
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-34.pyc
│ │ ├── __init__.cpython-34.pyc
│ │ ├── models.cpython-34.pyc
│ │ └── views.cpython-34.pyc
│ ├── tests.py
│ └── views.py
├── Mock
│ ├── admin.py
│ ├── __init__.py
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-34.pyc
│ │ ├── __init__.cpython-34.pyc
│ │ ├── models.cpython-34.pyc
│ │ └── views.cpython-34.pyc
│ ├── tests.py
│ └── views.py
├── Profile
│ ├── admin.py
│ ├── __init__.py
│ ├── models.py
│ ├── profile_script.py
│ ├── __pycache__
│ │ ├── admin.cpython-34.pyc
│ │ ├── __init__.cpython-34.pyc
│ │ ├── models.cpython-34.pyc
│ │ └── profile_script.cpython-34.pyc
│ ├── tests.py
│ └── views.py
├── Queue
│ ├── admin.py
│ ├── __init__.py
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-34.pyc
│ │ ├── __init__.cpython-34.pyc
│ │ └── models.cpython-34.pyc
│ ├── tests.py
│ └── views.py
├── requierement.txt
├── result.txt
└── runserver.sh
问候和感谢
答案 0 :(得分:2)
您是否已将django项目路径附加到python的路径?
e.g。
import os, sys
BASE_PATH="/location/folder/where/manage.py/lives"
sys.path.append(BASE_PATH)
os.environ['DJANGO_SETTINGS_MODULE'] = 'Agora.settings'
答案 1 :(得分:2)
虽然其他答案指出的sys.path问题可能是您当前的问题,但似乎对于您的用例(在应用程序上执行“某事”的脚本),Django custom command更适合。
设置自定义命令非常简单:
在API文件夹中创建路径management/commands
。不要忘记在__init__.py
和management
个文件夹中添加空commands
个文件。
然后在apiscript.py
文件夹中创建一个名为management/commands
的Python模块,其中包含以下内容:
from django.core.management.base import BaseCommand, CommandError
from Profile.models import Profile_User
class Command(BaseCommand):
help = 'Describe the purpose of your script'
def handle(self, *args, **options):
# do something with Profile_User model
p = Profile_User.objects.get(pk=1)
您已经设置了所有Django机器(无需调用django.setup()),您可以使用以下命令调用脚本:
./manage.py apiscript
答案 2 :(得分:1)
很可能情况是项目Agora
不在python路径上。
根据您的具体情况,您可以通过两种方式将其添加到路径中。
首先:根据您的操作系统,您可以将Agora
项目符号链接到python路径目录中。这很容易在linux和OSX上完成,在Windows上不那么容易。它将类似于:
ln -s /path/to/Agora /usr/local/lib/python2.7/site-packages/Agora
其次:在应用程序代码之前添加以下代码:
import sys
import os
agora_path = os.path.join('/path/to/library')
sys.path.append(agora_path)
# now add your code
# ...
答案 3 :(得分:0)
我已经使用了你的想法并使其不可知:
import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
print(BASE_DIR)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Agora.settings")
感谢