我重新安装了Windows并打开了一个现有的Pycharm项目,并在“设置”>“项目解释器”中得到错误“ SDK似乎无效”。
项目解释器路径指向venv中的python:
MyProject\venv\Scripts\python.exe
我尝试重新添加python.exe:
那就是我得到的错误:
更新:这是idea.log的错误,虚拟环境的许多其他问题似乎与Windows环境变量和系统路径有关:
2018-09-28 19:50:40,275 [ 17601] INFO - hon.packaging.PyPIPackageCache - Loaded 153296 packages from C:\Users\Matt\.PyCharm2018.2\system\python_packages\pypi-cache.json
2018-09-28 19:50:40,816 [ 18142] INFO - rains.python.sdk.PythonSdkType - Fatal Python error: Py_Initialize: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'
Current thread 0x00000fa8 (most recent call first):
Exit code -1073740791
2018-09-28 19:50:40,816 [ 18142] ERROR - ns.python.sdk.PythonSdkUpdater - Failed to determine Python's sys.path value:
STDOUT:
STDERR: Fatal Python error: Py_Initialize: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'
Current thread 0x00000fa8 (most recent call first):
com.jetbrains.python.sdk.InvalidSdkException: Failed to determine Python's sys.path value:
STDOUT:
STDERR: Fatal Python error: Py_Initialize: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'
[很可能,PyCharm尝试使用的通往Python环境的某些路径在某处已变得无效。 (至少)有两个主要嫌疑人:
PyCharm需要了解环境的运行路径。因此,如果该路径更改了,PyCharm的保存路径将变得无效。
转到File->Settings...->Project interpreter->(Gear icon)->Show all...
中项目的解释器设置:
然后删除并重新创建必要的条目。或编辑它们并指定正确的路径。例如。这是删除Anaconda安装后我的列表的样子:
由于virtualenv不是完整安装,因此它必须具有存放其基本安装的路径,以便可以从那里使用文件。
在撰写本文时,Windows中的virtualenv
(v16.0.0
)是这样实现的:
python.exe
和其他几个文件复制到virtualenv的子树中Lib\orig-prefix.txt
中,存储了基本安装的路径。它用于通过自定义Lib
将基本安装的sys.path
添加到site.py
。因此,如果该文件中的路径无效,那么virtualenv的Python解释器将无法找到任何标准模块,只有那些被复制的模块除外。完全适合您的症状。
什么解决方案是:签出venv\pyvenv.cfg
并提供基本python安装的有效路径。
最有可能发生的事情:重新安装操作系统后,您没有重新安装base python解释器,或者已将其安装在与以前不同的位置。因此,您的虚拟环境无法找到python安装位置。虚拟环境意味着所有库和设置都与其他项目隔离。它不提供隔离的python安装。您仍然需要用于venv创建的基本python。
我的情况:我在网络共享中有一个项目,并尝试从其他计算机访问它。基本的python路径取决于PC。上面的解决方案对我来说很好。不幸的是,我需要根据使用的PC更新pyvenv.cfg
。
P.S。我相信有一个环境变量可以覆盖venv配置值。我只尝试在Windows上单击set PYTHONPATH=C:\Anaconda3\envs\python37
,然后激活venv。它没有任何效果,我放弃了。