移动 python 项目文件夹位置后如何解决 PyCharm 找不到解释器与无法正常使用终端的问题
背景¶
因为项目需要,将部分 python 项目移动到了其他文件夹,导致在 PyCharm 中找不到解释器,也无法正常使用终端。
现象¶
我使用的 IDE 是 PyCharm 专业版 2021.3.2,具体表现为在 IDE 内打开终端后:
- PyCharm 找不到解释器
- 终端内执行 python 程序只能够使用全局包
- 无法进入 venv 环境(包括 PyCharm 自动进入和手动进入)
- 无法使用 pip
解决¶
找不到解释器¶
这个问题好解决,PyCharm 会自动检测当前目录下的 venv 文件夹,如果存在,则会将 venv/Scripts/python 设置为解释器。问题直接解决。
需要注意的是,因为我们是移动了 python 项目文件夹的,因此原来的解释器路径还保留在 PyCharm 内,所以需要手动将其删除。可以按照以下步骤进行操作:
找到 文件 -> 设置 -> 项目 -> Python 解释器
选择当前解释器右边的齿轮图标,点击 全部显示,找到红色标记的解释器,点击删除即可。
无法新建解释器¶
在你移动了项目文件夹(甚至重装了 venv 对应的 Python 基本解释器)的情况下,可能会导致 PyCharm 无法新建同名解释器,具体体现为:
- 使用原解释器名称和基本解释器版本新建解释器,PyCharm 只会在目标文件夹创建
venv文件夹,但并未在解释器列表里添加这个新增的解释器。而且无论如何用什么添加方法都无法添加。 - 为项目设置成
无解释器,此时 PyCharm 会自动检测到项目文件夹下的venv文件夹,会询问你是否要将这个venv设置为解释器。 - 上述操作可以将
venv设置为解释器,但是解释器名称会变成f'{原解释器名称}(2)',看起来是和原解释器冲突了。 - 删除
venv文件夹,使用不同的解释器名称(或者解释器版本)新建解释器,PyCharm 会正常添加。
总结一句话就是,不能和原来的解释器名称以及解释器版本冲突,两者不能同时都和旧解释器一样。
解决方法也很简单:
找到 C:\Users\AkibaArisa\AppData\Roaming\JetBrains\PyCharm2024.2\options\jdk.table.xml 文件,删除里面的旧解释器即可。
终端只能够使用全局包与无法进入 venv 环境¶
具体有以下几个表现:
-
自己的实际项目中有第三方库(例如
aiohttp),项目文件直接右键运行可以正常执行,但是在终端里面执行时会报错,提示ModuleNotFoundError: No module named 'aiohttp'。 -
终端里直接执行
where python显示的是全局 python 路径,而不是 venv 中的路径。 -
终端里直接执行
pip list会提示只有pip和setuptools两个包,而我们项目里依赖的包一个都没有。
原因在于 PyCharm 自动进入 venv 环境的时候是从 venv/Scripts/activate.bat 进入的,这个文件定义了 %PATH%,当我们已经移动了项目文件夹后,activate.bat 里记录的路径并没有改,而原来的路径已经不存在了,所以我们放在 venv 下的 python.exe 并不会自动进入到 %PATH% 中。
解决方式很简单,直接编辑 venv/Scripts/activate.bat 文件,linux 同理。
| activate.bat | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | |
| activate | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | |
| activate.fish | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | |
| activate.xsh | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | |
无法使用 pip¶
通过修改 activate.bat 使得能正常进入 venv 环境后,会迎来第三个问题,就是无法使用 pip 安装包。
具体表现为,使用 pip 命令后,终端会报错:Fatal error in launcher: unable to create process using: 'XXXXXXX/python.exe' 'XXXXXXXXX/pip.exe'。
我一看,这个所谓的 'XXXXXXX/python.exe' 正是我们在移动项目文件之前的 venv 的 python 路径,可是我们已经修改了 activate.bat 中的路径,怎么还是会出现这个问题呢。
参考了 Fatal error in launcher: Unable to create process using 这篇文章,了解到 pip.exe 同样也保存了路径,而且就保存在 pip.exe 这个二进制文件里,如果想要修改也不是不行,用 WinHex 这类工具改就行。
但是我们没必要这么麻烦,我的建议是直接原地重装 pip,步骤如下:
-
首先有了上一步的铺垫,我们已经能够进入 venv,那么进入 venv
I:\Developer\web\blog_mkdocs\venv\Scripts\activate.bat -
然后重装
pip(注意此时你已经在 venv 里了)python -m pip install --upgrade --force-reinstall pip
此时,该 venv 里的 pip 应该可以正常使用。
同理,继续检查 venv/Scripts 下的其他二进制文件,例如 mkdocs.exe,这些都要通过相同方式重装才能正常用。
pip install --upgrade --force-reinstall mkdocs