Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python/django扩展:没有名为common.types的模块__Python_Django_Python Extensions - Fatal编程技术网

python/django扩展:没有名为common.types的模块_

python/django扩展:没有名为common.types的模块_,python,django,python-extensions,Python,Django,Python Extensions,我已经使用django extensions中的“runscript”运行了一个位于“scripts”文件夹中的简单脚本。这里描述了该技术[1]()。 脚本将按如下方式成功运行: python manage.py runscript mysimplescript --script-args Testing 123 from common.types_ import Enum 如果我现在将脚本移动到子文件夹,那么我似乎需要指定子文件夹的完整路径: python manage.py runscr

我已经使用django extensions中的“runscript”运行了一个位于“scripts”文件夹中的简单脚本。这里描述了该技术[1]()。 脚本将按如下方式成功运行:

python manage.py runscript mysimplescript --script-args Testing 123
from common.types_ import Enum
如果我现在将脚本移动到子文件夹,那么我似乎需要指定子文件夹的完整路径:

python manage.py runscript scripts.myfolder.mysimplescript --script-args Testing 123
我已经编写了一个python脚本,当直接从命令行在它自己的项目文件夹中调用时,它会成功运行。复杂脚本使用大量位于过多子文件夹中的其他脚本

我现在想使用django扩展名“runscript”在django中调用这个脚本,这意味着它是从“manage.py”所在的“mysite/”文件夹调用的。脚本“mycomplexscript.py”不在“scripts/”文件夹中,而是与子文件夹和脚本一起重新定位到单独的“myapps/”项目文件夹中

我已经展示了下面的结构,其中包括“mysite/”和“myapp/”中的一些子文件夹/文件,特别是模块“myapp/common/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_
如果明确说明了项目根目录的完整路径(+++),则可以修复此错误:

这意味着我必须编辑所有文件并相应地更改路径,如果可能的话,我希望避免这样做。 这个链接[2]:()描述了从命令行引用另一个项目,所以我意识到这可能与我试图使用django扩展名“runscript”来实现这一点无关

是否有一种方法可以解决路径差异,而不必修改所有文件?正如这里所建议的[3]:(),设置PYTHONPATH是答案吗?我检查过了,但是“echo$PYTHONPATH”当前没有返回任何内容

为冗长的描述道歉

提前感谢。

我按照上面链接和[4]:()的建议尝试了sys.path.append(“my/path”),它似乎起了作用,因此现在可以识别“from”中包含的所有路径,而无需设置完整路径,如我前面所述(+++)

因此,从“mysite/”运行脚本时的结果是:

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)
('Testing', '123')
在脚本中硬编码此路径并不理想,因此可能可以将其作为参数之一传入。唯一的问题是,在复杂脚本中处理任何命令行参数之前,导入显示在文件的顶部,但至少我知道它在原则上是有效的。

我尝试了上面链接和[4]:()推荐的sys.path.append(“我的/path”),它似乎有效,因此,现在可以识别“from”中包含的所有路径,而无需设置完整路径,如我前面所述(+++)

因此,从“mysite/”运行脚本时的结果是:

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)
('Testing', '123')

在脚本中硬编码此路径并不理想,因此可能可以将其作为参数之一传入。唯一的问题是,在复杂脚本中处理任何命令行参数之前,导入显示在文件的顶部,但至少我知道它在原则上是有效的。

这是出于设计。您不能使用脚本中的部分路径和相对路径,python希望整个包与您的包兼容吗?我在将django从1.8.9升级到1.9时遇到了这个问题这是设计的。您不能使用脚本中的部分路径和相对路径,python希望整个包与您的包兼容吗?我在将django从1.8.9升级到1.9时遇到了这个问题
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)
('Testing', '123')