pipenv graph 执行报错 IndexError: list index out of range pipenv安装模块出错

一、问题描述

使用pipenv管理项目,一直好好的,忽然在一个项目中发现,不管安装多少次虚拟环境pipenv graph都会报错

Exception in thread Thread-2:

......

IndexError: list index out of range

D:\代码\weebot\wibot_bot>pipenv graph
Exception in thread Thread-2:
Traceback (most recent call last):
  File "E:\python3.8\lib\threading.py", line 932, in _bootstrap_inner
    self.run()
  File "E:\python3.8\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "E:\python3.8\lib\subprocess.py", line 1366, in _readerthread
    buffer.append(fh.read())
UnicodeDecodeError: 'gbk' codec can't decode byte 0x82 in position 1268: illegal multibyte sequence
Traceback (most recent call last):
  File "E:\python3.8\lib\runpy.py", line 192, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "E:\python3.8\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "E:\python3.8\Scripts\pipenv.exe\__main__.py", line 7, in <module>
  File "E:\python3.8\Lib\site-packages\pipenv\vendor\click\core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "E:\python3.8\Lib\site-packages\pipenv\vendor\click\core.py", line 782, in main
    rv = self.invoke(ctx)
  File "E:\python3.8\Lib\site-packages\pipenv\vendor\click\core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "E:\python3.8\Lib\site-packages\pipenv\vendor\click\core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "E:\python3.8\Lib\site-packages\pipenv\vendor\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "E:\python3.8\lib\site-packages\pipenv\cli\command.py", line 621, in graph
    do_graph(bare=bare, json=json, json_tree=json_tree, reverse=reverse)
  File "E:\python3.8\lib\site-packages\pipenv\core.py", line 2789, in do_graph
    c = run_command(cmd_args)
  File "E:\python3.8\lib\site-packages\pipenv\utils.py", line 154, in run_command
    c = delegator.run(cmd_string, *args, **kwargs)
  File "E:\python3.8\lib\site-packages\pipenv\vendor\delegator.py", line 339, in run
    c.block()
  File "E:\python3.8\lib\site-packages\pipenv\vendor\delegator.py", line 248, in block
    stdout, stderr = self.subprocess.communicate()
  File "E:\python3.8\lib\subprocess.py", line 1024, in communicate
    stdout, stderr = self._communicate(input, endtime, timeout)
  File "E:\python3.8\lib\subprocess.py", line 1418, in _communicate
    stderr = stderr[0]
IndexError: list index out of range

 

之前的项目已经存在的虚拟环境就不存在这个错误,可以正常输出,证明是虚拟环境的错误

我期间安装过32位的python,总是造成环境异常,执行pipenv install的时候总是优先使用32位的,虽然环境变量在后面,所以就卸载了,感觉还是因为这个问题

经过一上午来回测试,最终解决:

 

 

 

 

到这里还没有结束,因为新项目用到了win32api模块,但是不能直接安装好,需要安装pypiwin32后才能导入win32api,

执行了pipenv install pypiwin32 后,直接把环境给我交了个底朝天:

 

 

 

 

这才最终明白,是安装这个模块的时候,pipenv把本来是64的系统模块全给卸载替换为32的了,所以环境就变了

随后我执行pipenv uninstall pypiwin32 ,但是没用的,环境已经变了

然后执行 pipenv --rm 移除环境重新安装,也不行

xxoo..............................ooxx一顿操作,最后发现必须执行以下几步才行:

第一步: pipenv --rm 移除环境,且需要到系统存放文件夹确认没有这个环境了,执行pipenv graph确认没有环境了

第二步:删除该项目的pipfile和lock文件,将正常项目的pipfile和lock文件复制过来(即使看起来一样也不行,不知道哪里受到污染了,必须替换)

第三步:pipenv install 安装新环境,然后执行pipenv graph就没问题了,随后你的项目需要什么模块再通过 pipenv install xxoo 安装补充回来就好了( pypiwin32已安装就坏了,用其他相同工功能模块代替吧)

二、pipenv install 模块名  出错

补充:经过测试发现了,那些不能用pipenv install xxoo 直接安装记录到pipfile的模块,可以通过以下几步稍微麻烦点使用:

第一步:一个项目环境可以pipenv install 安装所有pipfile中记录在册的模块

第二步:pipenv shell 进入该虚拟环境
第三步:pip install pypiwin32 这样在虚拟环境内部用pip安装pipenv安装出错的模块,就可以正常使用了(之前用腾讯云的模块,也是支持pip,也是测试后发现这样的方法可以成功)

 

posted @ 2021-10-22 12:14  www.pu  Views(332)  Comments(0Edit  收藏  举报