Windows 上损坏的自定义 Django 管理命令
Custom Django management commands broken on Windows
我目前正在努力从 django 1.3 升级到 1.8。我的应用程序现在正在 Ubuntu (Ubuntu 16.04) 上运行,但是 Windows 版本有问题。
当我在 Windows 上 运行 我的自定义管理命令时,会生成以下错误:
Traceback (most recent call last):
File "D:\src\proj\grp\tests\test_list_members.py", line 29, in setUp
call_command('syncgroups')
File "D:\src\env\lib\site-packages\django\core\management\__init__.py", line 103, in call_command
parser = command.create_parser('', name)
File "D:\src\env\lib\site-packages\django\core\management\base.py", line 316, in create_parser
help='Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, 3=very verbose output')
File "C:\Python27\Lib\optparse.py", line 1018, in add_option
raise TypeError, "invalid arguments"
TypeError: invalid arguments
我已经找到问题的根源,__future__.unicode_literals
在 Windows 和 Ubuntu 上的处理似乎不同。例如,以下适用于 Ubuntu 但不适用于 Windows(与上面相同的 TypeError
错误)
from __future__ import unicode_literals
from optparse import OptionParser
OptionParser().add_option('-v', '--verbose')
这是否意味着 Django 1.8 不再支持 Windows 上的自定义管理命令?
任何解决方法将不胜感激!
问题是我的 Windows 机器上安装的 OptionParser 版本没有更新以正确支持 Unicode。更新我的 python 安装是最好的解决方案,但也可以使用临时解决方法。
对 %PYTHONHOME%\Lib\optparse.py 进行以下更改解决了这个问题...
1006 ...
1007 def add_option(self, *args, **kwargs):
1008 """add_option(Option)
1009 add_option(opt_str, ..., kwarg=val, ...)
1010 """
+- if type(args[0]) in types.StringTypes:
1012 option = self.option_class(*args, **kwargs)
1013 elif len(args) == 1 and not kwargs:
1014 option = args[0]
1015 ...
我目前正在努力从 django 1.3 升级到 1.8。我的应用程序现在正在 Ubuntu (Ubuntu 16.04) 上运行,但是 Windows 版本有问题。
当我在 Windows 上 运行 我的自定义管理命令时,会生成以下错误:
Traceback (most recent call last):
File "D:\src\proj\grp\tests\test_list_members.py", line 29, in setUp
call_command('syncgroups')
File "D:\src\env\lib\site-packages\django\core\management\__init__.py", line 103, in call_command
parser = command.create_parser('', name)
File "D:\src\env\lib\site-packages\django\core\management\base.py", line 316, in create_parser
help='Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, 3=very verbose output')
File "C:\Python27\Lib\optparse.py", line 1018, in add_option
raise TypeError, "invalid arguments"
TypeError: invalid arguments
我已经找到问题的根源,__future__.unicode_literals
在 Windows 和 Ubuntu 上的处理似乎不同。例如,以下适用于 Ubuntu 但不适用于 Windows(与上面相同的 TypeError
错误)
from __future__ import unicode_literals
from optparse import OptionParser
OptionParser().add_option('-v', '--verbose')
这是否意味着 Django 1.8 不再支持 Windows 上的自定义管理命令?
任何解决方法将不胜感激!
问题是我的 Windows 机器上安装的 OptionParser 版本没有更新以正确支持 Unicode。更新我的 python 安装是最好的解决方案,但也可以使用临时解决方法。
对 %PYTHONHOME%\Lib\optparse.py 进行以下更改解决了这个问题...
1006 ...
1007 def add_option(self, *args, **kwargs):
1008 """add_option(Option)
1009 add_option(opt_str, ..., kwarg=val, ...)
1010 """
+- if type(args[0]) in types.StringTypes:
1012 option = self.option_class(*args, **kwargs)
1013 elif len(args) == 1 and not kwargs:
1014 option = args[0]
1015 ...