Мне удалось запустить простой скрипт, расположенный в папке «скрипты», используя «скрипт» из django-extensions. Техника описана здесь [1] (https://django-extensions.readthedocs.org/en/latest/runscript.html). Сценарий будет успешно работать следующим образом:python/django-extensions ImportError: Нет модуля с именем common.types_
python manage.py runscript mysimplescript --script-args Testing 123
Должен ли я теперь перейдем сценарий к подпапке, то оказывается, мне нужно указать полный путь к подпапке:
python manage.py runscript scripts.myfolder.mysimplescript --script-args Testing 123
Я написал скрипт python, который успешно запускается при вызове непосредственно из командной строки в его собственной папке проекта. Сложный скрипт использует ряд дополнительных скриптов, расположенных в множестве подпапок.
Теперь я хочу называть этот скрипт в django, используя django-extensions '' runningcript, что означает, что он вызывается из папки mysite /, где находится «manage.py». Скрипт «mycomplexscript.py» не находится в папке «scripts /», а перемещается в отдельную папку проекта «myapps /» вместе с подпапками и скриптами.
Я показал структура ниже, включает в себя 'MySite /' и некоторые из вложенных папок/файлов в 'MyApp /', в частности, модуль 'MYAPP/общее/types_':
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
scripts
__init__.py
mysimplescript.py
myapps/
__init__.py
mycomplexscript.py
common/
__init__.py
comparison.py
serialisation/
__init__.py
serialisation.py
xml.py
types_/
__init__.py
enum.py
Django-extensions требует, чтобы «mycomplexscript.py» должен включать функцию «run()». Line # 6 импортирует класс от одного из проектов подпапок:
def run(*script_args):
import os
import sys
import time
from common.serialisation import XML
При вызове сценария, возникает ошибка, потому что модуль «common.types_» не может быть расположен.
python manage.py runscript myapps.mycomplexscript --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)
Exception while running run() in 'myapps.mycomplexscript'
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 172, in handle
run_script(mod, *script_args)
File "/usr/lib/python2.7/site-packages/django_extensions-1.6.1-py2.7.egg/
django_extensions/management/commands/runscript.py", line 79, in run_script
mod.run(*script_args)
File "/usr/tester/SwFact/isg_cid-system_test_current/my_site/myapps/
mycomplexscript.py", line 9, in run
from myapps.common.serialisation import XML
File "/usr/tester/SwFact/isg_cid- system_test_current/my_site/myapps/
common/__init__.py", line 7, in <module>
from comparison import Comparison
File "/usr/tester/SwFact/isg_cid-system_test_current/my_site/myapps/
common/comparison.py", line 7, in <module>
from common.types_ import Enum
ImportError: No module named common.types_
Проблематика Line # 7 в «comparison.py» выглядит следующим образом:
from common.types_ import Enum
ошибка может быть исправлена, если полный путь к корню проекта указывается явно (+++):
from apps.common.types_ import Enum
Это означает, что мне нужно будет отредактировать все файлы и соответственно изменить пути, которые я хотел бы избежать, если это возможно. Эта ссылка [2] :(Python: Referencing another project) описывает ссылку на другой проект из командной строки, поэтому я понимаю, что это не имеет ничего общего с тем, что я пытаюсь сделать это, используя «скрипт» django-extensions.
Есть ли способ разрешить несоответствие пути, не изменяя все файлы? Будет ли установка PYTHONPATH ответом, как предлагается здесь [3] :(How to use PYTHONPATH)? Я проверил, но «echo $ PYTHONPATH» в настоящее время ничего не возвращает.
Извинения за затянутое описание.
Заранее спасибо.
Это по дизайну. Вы не можете использовать частичный и относительный путь из сценария, python хочет весь пакет –
Совместимы ли ваши пакеты? У меня возникла эта проблема при обновлении 'django' с 1,8,9 до 1,9 –