在Windows 8.1上用Django运行manage.py runserver时出错

3 投票
5 回答
3745 浏览
提问于 2025-04-20 08:27

我在网上找不到这个退出代码,希望你们能帮我一下,或者告诉我这是不是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 个回答

1

我也遇到过同样的问题。
问题的原因是环境变量里有非拉丁字符。
在我的情况下,是某个文件夹的西里尔字母名字,而我的Windows系统最开始是英文版。
所以就出现了冲突。把它删掉之后,一切就正常了。

1
UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1:invalid character

我在Windows 7上也遇到了同样的问题。

$ python manage.py runserver

如果有人像我一样有个用西里尔字母(比如俄语字母)的电脑名字,这正是导致你编码问题的原因。所以解决办法就是把你的电脑名字改成只用拉丁字母的名字。

2

我试过这个

new_environ['PATH'] = os.path.abspath(new_environ['PATH'].replace('\u202a', ''))

但是没有成功。

我的解决办法是

new_environ['PATH'] = os.path.abspath(new_environ['PATH'].encode('ascii', 'replace'))

希望这能帮到你!

3

在我的情况下,这跟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
6

我之前也遇到过同样的问题,后来找到了解决办法。根据我查找的信息,这个问题在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。希望这能解决你的问题,别觉得自己是一个人。

撰写回答