在Windows 8.1上用Django运行manage.py runserver时出错
我在网上找不到这个退出代码,希望你们能帮我一下,或者告诉我这是不是Python/Django的一个bug。
首先,这是错误信息的堆栈跟踪:
Traceback (most recent call last):
File "C:\Sitezooi\SiteTest\manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "C:\Program Files\Python\lib\site-packages\django\core\management\__init_
_.py", line 385, in execute_from_command_line
utility.execute()
File "C:\Program Files\Python\lib\site-packages\django\core\management\__init_
_.py", line 377, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Program Files\Python\lib\site-packages\django\core\management\base.py
", line 288, in run_from_argv
self.execute(*args, **options.__dict__)
File "C:\Program Files\Python\lib\site-packages\django\core\management\base.py
", line 338, in execute
output = self.handle(*args, **options)
File "C:\Program Files\Python\lib\site-packages\django\core\management\command
s\runserver.py", line 83, in handle
self.run(*args, **options)
File "C:\Program Files\Python\lib\site-packages\django\core\management\command
s\runserver.py", line 92, in run
autoreload.main(self.inner_run, args, options)
File "C:\Program Files\Python\lib\site-packages\django\utils\autoreload.py", l
ine 322, in main
reloader(wrapped_main_func, args, kwargs)
File "C:\Program Files\Python\lib\site-packages\django\utils\autoreload.py", l
ine 293, in python_reloader
exit_code = restart_with_reloader()
File "C:\Program Files\Python\lib\site-packages\django\utils\autoreload.py", l
ine 279, in restart_with_reloader
exit_code = os.spawnve(os.P_WAIT, sys.executable, args, new_environ)
UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1: inval
id character
请忽略那个奇怪的文件路径,我甚至试着直接把它放在C:\上。
这里还有一个可能类似的Stackoverflow问题:使用compile函数时的UnicodeEncodeError,但我用的文件路径并没有包含任何非英语字符。我尝试了那里的几个解决方案,但都没用。
我在运行Python 3.4.1,之前在2.7.x上测试过,也不行。在Linux(Ubuntu)上运行正常。
这个Django项目没有什么特别的,因为它只是一个空的startproject项目。
5 个回答
我也遇到过同样的问题。
问题的原因是环境变量里有非拉丁字符。
在我的情况下,是某个文件夹的西里尔字母名字,而我的Windows系统最开始是英文版。
所以就出现了冲突。把它删掉之后,一切就正常了。
UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1:invalid character
我在Windows 7上也遇到了同样的问题。
$ python manage.py runserver
如果有人像我一样有个用西里尔字母(比如俄语字母)的电脑名字,这正是导致你编码问题的原因。所以解决办法就是把你的电脑名字改成只用拉丁字母的名字。
我试过这个
new_environ['PATH'] = os.path.abspath(new_environ['PATH'].replace('\u202a', ''))
但是没有成功。
我的解决办法是
new_environ['PATH'] = os.path.abspath(new_environ['PATH'].encode('ascii', 'replace'))
希望这能帮到你!
在我的情况下,这跟PATH
没有关系。似乎有一个叫CHROME_RESTART
的环境设置里面有一些非英语字符。把它从new_environ
中去掉就解决了问题:
def restart_with_reloader():
while True:
args = [sys.executable] + ['-W%s' % o for o in sys.warnoptions] + sys.argv
if sys.platform == "win32":
args = ['"%s"' % arg for arg in args]
new_environ = os.environ.copy()
new_environ["RUN_MAIN"] = 'true'
# This will prevent UnicodeEncodeError
new_environ.pop("CHROME_RESTART", None)
exit_code = os.spawnve(os.P_WAIT, sys.executable, args, new_environ)
if exit_code != 3:
return exit_code
我之前也遇到过同样的问题,后来找到了解决办法。根据我查找的信息,这个问题在Windows 7和8上也会出现。
如果你想更详细地了解我是怎么解决的,可以看看我在Django论坛上提交的帖子:在Windows上运行manage.py时出错(7 / 8 / 8.1)。
现在要解决这个错误,打开这个文件 C:\Program Files\Python\lib\site-packages\django\utils\autoreload.py(我用你的代码作为参考),然后在出错的地方(第279行)之前添加这一行代码:
new_environ['PATH'] = os.path.abspath(new_environ['PATH'].replace('\u202a', ''))
你的函数现在应该看起来像这样:
def restart_with_reloader():
while True:
args = [sys.executable] + ['-W%s' % o for o in sys.warnoptions] + sys.argv
if sys.platform == "win32":
args = ['"%s"' % arg for arg in args]
new_environ = os.environ.copy()
new_environ["RUN_MAIN"] = 'true'
new_environ['PATH'] = os.path.abspath(new_environ['PATH'].replace('\u202a', ''))
exit_code = os.spawnve(os.P_WAIT, sys.executable, args, new_environ)
if exit_code != 3:
return exit_code
现在再试试运行manage.py runserver。希望这能解决你的问题,别觉得自己是一个人。