我已經設法使用django-extensions中的'runscript'運行位於'scripts'文件夾中的簡單腳本。該技術在此處描述[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的'runscript'調用這個腳本,這意味着它是從'manage.py'所在的'mysite /'文件夾中調用的。腳本'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擴展需要'mycomplexscript.py'必須包含'run()'函數。 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_
在「comparison.py」問題的行#7如下:
from common.types_ import Enum
可以如果完整路徑項目的根陳述被固定的錯誤明確地(+++):
from apps.common.types_ import Enum
這意味着我將不得不編輯所有文件並相應地更改路徑,如果可能,我想避免這種情況。 這個鏈接[2] :(:Python: Referencing another project)描述了從命令行引用另一個項目,所以我意識到這可能與我試圖通過使用django-extensions的'runscript'來做到這一點無關。
有沒有一種方法可以解決路徑不一致問題,而無需修改所有文件?將設置PYTHONPATH作爲答案,這裏建議[3] :(How to use PYTHONPATH)?我檢查,但'echo $ PYTHONPATH'目前不會返回任何東西。
道歉的囉嗦描述。
在此先感謝。
這是設計。你不能使用腳本中的部分和相對路徑,python需要整個包 –
你的包是否兼容?將'django'從1.8.9升級到1.9時,我遇到了這個問題 –