Python 通过SSH运行自定义Django管理命令

Python 通过SSH运行自定义Django管理命令,python,django,ssh,Python,Django,Ssh,我有一个Django应用程序,其中一个应用程序中有一个自定义管理命令。如果我通过SSH登录,我可以在没有任何问题的情况下运行它 python manage.py sitedir/mycommand 但是,如果我尝试从本地框中以单行方式运行命令,如下所示: Traceback (most recent call last): File "mysite/manage.py", line 11, in <module> execute_manager(settings) F

我有一个Django应用程序,其中一个应用程序中有一个自定义管理命令。如果我通过SSH登录,我可以在没有任何问题的情况下运行它

python manage.py sitedir/mycommand

但是,如果我尝试从本地框中以单行方式运行命令,如下所示:

Traceback (most recent call last):
  File "mysite/manage.py", line 11, in <module>
    execute_manager(settings)
  File "/usr/lib/python2.5/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/usr/lib/python2.5/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/python2.5/site-packages/django/core/management/__init__.py", line 261, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/usr/lib/python2.5/site-packages/django/core/management/__init__.py", line 67, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/usr/lib/python2.5/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
ImportError: No module named mysite.myapp.management.commands.mycommand
ssh myserver python manage.py sitedir/mycommand

我有这样的恐惧:

Traceback (most recent call last):
  File "mysite/manage.py", line 11, in <module>
    execute_manager(settings)
  File "/usr/lib/python2.5/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/usr/lib/python2.5/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/python2.5/site-packages/django/core/management/__init__.py", line 261, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/usr/lib/python2.5/site-packages/django/core/management/__init__.py", line 67, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/usr/lib/python2.5/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
ImportError: No module named mysite.myapp.management.commands.mycommand
回溯(最近一次呼叫最后一次):
文件“mysite/manage.py”,第11行,在
执行\u管理器(设置)
文件“/usr/lib/python2.5/site packages/django/core/management/_init__.py”,第438行,在执行管理器中
utility.execute()
文件“/usr/lib/python2.5/site packages/django/core/management/_init__.py”,第379行,在execute中
self.fetch_命令(子命令)。从_argv(self.argv)运行_
文件“/usr/lib/python2.5/site packages/django/core/management/_init__.py”,第261行,在fetch_命令中
klass=加载命令类(应用程序名称,子命令)
文件“/usr/lib/python2.5/site packages/django/core/management/_init__.py”,第67行,在load_命令_类中
模块=导入模块(“%s.management.commands.%s%”(应用程序名称,名称))
文件“/usr/lib/python2.5/site packages/django/utils/importlib.py”,第35行,在导入模块中
__导入(名称)
ImportError:没有名为mysite.myapp.management.commands.mycommand的模块

真正的原因是我想从结构脚本运行这个admin命令,但在我能够通过ssh-one-liner运行它之前,我想这是不可能的。当您通过ssh一行程序运行它时,环境中是否存在一些不同之处?在这两种情况下,python路径似乎都是正确的。

我想我知道发生了什么。我还不知道怎么修

为了重现你的情景,我写了一个小脚本

#!/usr/bin/python
import sys, django
print django.VERSION
之后,我通过SSH和远程登录(
SSH yourserver.com“python/home/me/script.py”
)执行了它,一切正常

然后我改变了剧本

#!/usr/bin/python
import os
print os.environ['DJANGO_SETTINGS_MODULE']
当我登录到服务器时,该版本工作正常,但当我尝试远程执行时,失败

Traceback (most recent call last):
  File "/home/me/script.py", line 3, in <module>
    print os.environ['DJANGO_SETTINGS_MODULE']
  File "/usr/lib/python2.5/UserDict.py", line 22, in __getitem__
    raise KeyError(key)
KeyError: 'DJANGO_SETTINGS_MODULE'

我想我知道发生了什么事。我还不知道怎么修

为了重现你的情景,我写了一个小脚本

#!/usr/bin/python
import sys, django
print django.VERSION
之后,我通过SSH和远程登录(
SSH yourserver.com“python/home/me/script.py”
)执行了它,一切正常

然后我改变了剧本

#!/usr/bin/python
import os
print os.environ['DJANGO_SETTINGS_MODULE']
当我登录到服务器时,该版本工作正常,但当我尝试远程执行时,失败

Traceback (most recent call last):
  File "/home/me/script.py", line 3, in <module>
    print os.environ['DJANGO_SETTINGS_MODULE']
  File "/usr/lib/python2.5/UserDict.py", line 22, in __getitem__
    raise KeyError(key)
KeyError: 'DJANGO_SETTINGS_MODULE'

您可以在manage.py中尝试使用sys.path的
mysite
path?这可能会有所帮助——正如我现在看到的,python没有看到mysite目录

import sys
sys.path.append('mysite_directory')

您可以在manage.py中尝试使用sys.path的
mysite
path?这可能会有所帮助——正如我现在看到的,python没有看到mysite目录

import sys
sys.path.append('mysite_directory')

这可能是因为未加载.profile文件。请尝试以下操作(用shell配置文件替换.profile):


这可能是因为未加载.profile文件。请尝试以下操作(用shell配置文件替换.profile):


这对我来说不起作用,但感觉可能有关联。我在看django chronograph是如何设置环境的,看是否有我可以复制的东西。这对我来说不起作用,但感觉可能有关联。我在看django计时表是如何设置环境的,看看是否有我可以复制的东西。我想你已经了解了一些东西。我已经通过一个shell脚本oneliner运行了它,如下所示:cd$PROJECTPATH&&$HOME/v/bin/python manage.py mycommand--settings=$settings--pythonpath=$HOME这看起来毕竟是一个与路径相关的问题。当用户未正确登录时,环境似乎变得一团糟。谢谢你花时间调查此事。我想你已经了解了一些事情。我已经通过一个shell脚本oneliner运行了它,如下所示:cd$PROJECTPATH&&$HOME/v/bin/python manage.py mycommand--settings=$settings--pythonpath=$HOME这看起来毕竟是一个与路径相关的问题。当用户未正确登录时,环境似乎变得一团糟。谢谢你花时间调查此事。