pipenv创建环境失败

有时候会创建多个python环境,习惯性的使用pipenv,结果之前用的好好的pipenv突然报编码错误。emmmmm…只能说诡异。

0X01 环境

python 3.6.6、pipenv 2018.11.26

0X02 错误信息

运行“pipenv shell”创建环境,结果报错了。

Failed creating virtual environment
[pipenv.exceptions.VirtualenvCreationException]:   File "e:\python36\lib\site-packages\pipenv\cli\command.py", line 390, in shell
[pipenv.exceptions.VirtualenvCreationException]:       pypi_mirror=state.pypi_mirror,
[pipenv.exceptions.VirtualenvCreationException]:   File "e:\python36\lib\site-packages\pipenv\core.py", line 2156, in do_shell
[pipenv.exceptions.VirtualenvCreationException]:       three=three, python=python, validate=False, pypi_mirror=pypi_mirror,
[pipenv.exceptions.VirtualenvCreationException]:   File "e:\python36\lib\site-packages\pipenv\core.py", line 574, in ensure_project
[pipenv.exceptions.VirtualenvCreationException]:       pypi_mirror=pypi_mirror,
[pipenv.exceptions.VirtualenvCreationException]:   File "e:\python36\lib\site-packages\pipenv\core.py", line 506, in ensure_virtualenv
[pipenv.exceptions.VirtualenvCreationException]:       python=python, site_packages=site_packages, pypi_mirror=pypi_mirror
[pipenv.exceptions.VirtualenvCreationException]:   File "e:\python36\lib\site-packages\pipenv\core.py", line 935, in do_create_virtualenv
[pipenv.exceptions.VirtualenvCreationException]:       extra=[crayons.blue("{0}".format(c.err)),]
[pipenv.exceptions.VirtualenvCreationException]: Traceback (most recent call last):
  File "e:\python36\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "e:\python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "e:\python36\lib\site-packages\virtualenv.py", line 2345, in <module>
    main()
  File "e:\python36\lib\site-packages\virtualenv.py", line 712, in main
    symlink=options.symlink)
  File "e:\python36\lib\site-packages\virtualenv.py", line 947, in create_environment
    download=download,
  File "e:\python36\lib\site-packages\virtualenv.py", line 904, in install_wheel
    call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=SCRIPT)
  File "e:\python36\lib\site-packages\virtualenv.py", line 770, in call_subprocess
    line = line.decode(encoding)
AttributeError: 'str' object has no attribute 'decode'

Failed to create virtual environment.

网上找了一圈也没找到有人说过这个错误,难道是我查找的姿势不对??

0X03 解决办法

看起来好像是编码的问题,打开文件"e:\python36\lib\site-packages\virtualenv.py"找到报错位置,修改代码:

proc_stdout = proc_stdout.strip().decode("utf-8")

改成:

proc_stdout = proc_stdout.strip() if type(proc_stdout) is str else proc_stdout.strip().decode("utf-8")

改完运行,又报错:

  File "e:\python36\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "e:\python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "e:\python36\lib\site-packages\virtualenv.py", line 2347, in <module>
    main()
  File "e:\python36\lib\site-packages\virtualenv.py", line 712, in main
    symlink=options.symlink)
  File "e:\python36\lib\site-packages\virtualenv.py", line 949, in create_environment
    download=download,
  File "e:\python36\lib\site-packages\virtualenv.py", line 906, in install_wheel
    call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=SCRIPT)
  File "e:\python36\lib\site-packages\virtualenv.py", line 763, in call_subprocess
    proc.stdin.write(stdin)
TypeError: write() argument must be str, not bytes

再根据错误改:

proc.stdin.write(stdin)

在这行代码上边加上一行:

stdin = stdin if type(stdin) is str else bytes.decode(stdin,encoding='utf8')
proc.stdin.write(stdin)

运行,又报错。没事,微笑面对。

  File "e:\python36\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "e:\python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "e:\python36\lib\site-packages\virtualenv.py", line 2345, in <module>
    main()
  File "e:\python36\lib\site-packages\virtualenv.py", line 712, in main
    symlink=options.symlink)
  File "e:\python36\lib\site-packages\virtualenv.py", line 947, in create_environment
    download=download,
  File "e:\python36\lib\site-packages\virtualenv.py", line 904, in install_wheel
    call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=SCRIPT)
  File "e:\python36\lib\site-packages\virtualenv.py", line 770, in call_subprocess
    line = line.decode(encoding)
AttributeError: 'str' object has no attribute 'decode'

我再改!!继续找到这行代码。

line = line.decode(encoding)

改成:

line = line.decode(encoding) if type(line) is not str else line

改完以后再次运行。
在这里插入图片描述
成功。
按理来说之前能成功运行,突然创建不了,又是编码的问题,难道是因为我电脑有改动过什么编码??有时间再瞅瞅看能不能找到原因吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值