После нескольких лет написания на C и C++ я чувствую себя немного странно, когда дело доходит до python и django. Кажется, у меня не получается что-то простое работать. Я признаю, что ошибка обсуждалась в ряде сообщений.Python/Django TypeError: относительный импорт требует аргумента «package»
Я начал изучать некоторые учебники django, поэтому я запустил «django-admin startproject mysite», который создал папку «mysite».
Я установил django_extensions, поэтому теперь я пытаюсь использовать его «скрипт». У меня есть более сложный сценарий, который я хочу, чтобы запустить позже, но сейчас я пытаюсь вызвать простой пользовательский сценарий, который я нашел в Интернете с помощью этого механизма есть
mysimplescript.py:
def run(*script_args):
print script_args
Он находится в папке «Scripts» так что моя структура выглядит следующим образом, где внешняя MySite/корневой каталог просто контейнер для моего проекта:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
scripts
__init__.py
mysimplescript.py
При запуске сценария следующим образом, я получаю относительную ошибку импорта.
python manage.py runscript .scripts.mysimplescript.py --script-args
Testing 123
/usr/lib/python2.7/site-packages/Django-1.9.2-py2.7.egg/django/core
/management/base.py:265: RemovedInDjango110Warning:
OptionParser usage for Django management commands is deprecated, use
ArgumentParser instead
RemovedInDjango110Warning)
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/lib/python2.7/site-packages/Django-1.9.2-py2.7.egg/django/core
/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/usr/lib/python2.7/site-packages/Django-1.9.2-py2.7.egg/django/core
/management/__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/lib/python2.7/site-packages/django_extensions-1.6.1-py2.7.egg/
django_extensions/management/email_notifications.py", line 63, in
run_from_argv
super(EmailNotificationCommand, self).run_from_argv(argv)
File "/usr/lib/python2.7/site-packages/Django-1.9.2-py2.7.egg/django/core
/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/lib/python2.7/site-packages/django_extensions-1.6.1-py2.7.egg/
django_extensions/management/email_notifications.py", line 75, in execute
super(EmailNotificationCommand, self).execute(*args, **options)
File "/usr/lib/python2.7/site-packages/Django-1.9.2-py2.7.egg/django/core
/management/base.py", line 399, in execute
output = self.handle(*args, **options)
File "/usr/lib/python2.7/site-packages/django_extensions-1.6.1-py2.7.egg/
django_extensions/management/utils.py", line 57, in inner
ret = func(self, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/django_extensions-1.6.1-py2.7.egg/
django_extensions/management/commands/runscript.py", line 163, in handle
modules = find_modules_for_script(script)
File "/usr/lib/python2.7/site-packages/django_extensions-1.6.1-py2.7.egg/
django_extensions/management/commands/runscript.py", line 146, in
find_modules_for_script
mod = my_import(nn)
File "/usr/lib/python2.7/site-packages/django_extensions-1.6.1-py2.7.egg/
django_extensions/management/commands/runscript.py", line 99, in my_import
importlib.import_module(mod)
File "/usr/lib64/python2.7/importlib/__init__.py", line 30, in import_module
raise TypeError("relative imports require the 'package' argument")
TypeError: relative imports require the 'package' argument
Если я включаю отладки, то я могу увидеть следующее @ runscript.py # 99: Проверки на .scripts.mysimplescript.scripts.py
первоначально Пробежав несколько Джанго учебников, следующие были установлены:
./mysite/wsgi.py:os.environ.setdefault("DJANGO_SETTINGS_MODULE",
"mysite.settings")
./manage.py: os.environ.setdefault("DJANGO_SETTINGS_MODULE",
"mysite.settings")
./mysite/settings.py:ROOT_URLCONF = 'mysite.urls'
Некоторые из обсуждений по теме, например [1]: python packaging for relative imports и [2]: How to do relative imports in Python? предлагают добавить main.py во внешний mysite/каталог.
По существу, хотя, я все еще хочу, чтобы вызвать сценарий через Джанго-расширений с помощью:
python manage.py runscript <some_script>
Просто еще один момент. Если я отброшу '.' предшествующее папка т.е.
python manage.py runscript scripts.mysimplescript.py --script-args Testing
123
тогда я получаю следующее сообщение об ошибке:
No (valid) module for script 'scripts.mysimplescript.py' found
еще а 'mysimplescript.pyc' генерируется.
Может кто-нибудь помочь мне, пожалуйста? Как я могу получить python для распознавания пакета? Заранее спасибо.
вы пробовали 'питон manage.py RunScript mysimplescript'? Это похоже на пример [в документах] (http://django-extensions.readthedocs.org/en/latest/runscript.html#usage), где вы запускаете 'python manage.py runcript delete_all_polls' для запуска скриптов/delete_all_polls.py'. – Alasdair
Alasdair, да, у меня есть. python manage.py runningcript mysimplescript.py --script-args Тестирование 123 Я получаю ту же ошибку: Check для mysimplescript.py Нет (действительный) модуль для скрипта mysimplescript.py найдено –
Попробуйте 'mysimplescript' без' .py'. – Alasdair