PyCharm中安装langchain与kor失败:greenlet编译报错
在PyCharm中尝试安装kor和langchain(导入代码如下):
# kor from kor.extraction import create_extraction_chain from kor.nodes import Object, Text, Number # LangChain Models from langchain.chat_models import ChatOpenAI from langchain.llms import OpenAI
但安装时触发编译错误,核心信息如下:
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at:
/Library/Developer/CommandLineTools/usr/bin/xcrun
error: command '/usr/bin/gcc' failed with exit code 1
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for greenlet
ERROR: Could not build wheels for greenlet, which is required to install pyproject.toml-based projects
单独安装greenlet也报相同错误,但终端直接用pip安装这两个包完全正常,仅PyCharm内安装失败。
环境信息:
- macOS 13.3.1
- Python 3.9.9
- PyCharm 2023.1.1(社区版)
- Pip 23.1.2
补充尝试:
曾在终端尝试通过PyCharm的packaging_tool.py为项目虚拟环境安装langchain,执行了以下步骤:
/Users/user/PycharmProjects/test_openai/venv/bin/activate /Users/user/PycharmProjects/test_openai/venv/bin/python /Applications/PyCharm.app/Contents/plugins/python-ce/helpers/packaging_tool.py install langchain
即便文件确实存在于对应路径,仍报错:
can't open file '/Applications/PyCharm.app/Contents/plugins/python-ce/helpers/packaging_tool.py': [Errno 2] No such file or directory
1. 修复Xcode命令行工具权限(核心)
PyCharm的GUI安装流程可能没加载完整系统环境变量,导致找不到xcrun工具。先在系统终端执行以下命令:
# 安装/更新Xcode命令行工具 xcode-select --install # 如果已安装,重置路径 sudo xcode-select --reset
执行完成后重启PyCharm,再尝试安装。
2. 用PyCharm内置终端直接安装
打开PyCharm底部的「终端」标签,它会自动激活当前项目的虚拟环境,直接执行安装命令:
pip install kor langchain
内置终端会继承系统完整环境变量,能避开GUI安装的环境问题。
3. 检查PyCharm的Python解释器配置
- 打开「File > Settings > Project: [你的项目名] > Python Interpreter」
- 确认选中的是项目的虚拟环境(路径为
/Users/user/PycharmProjects/test_openai/venv/bin/python) - 配置正确的话,点击右侧「+」按钮,搜索kor和langchain进行安装,此时Xcode工具修复后就能正常编译greenlet。
4. 修正packaging_tool.py的调用方式
之前的命令执行方式有误,正确的命令应该是一行完成:
source /Users/user/PycharmProjects/test_openai/venv/bin/activate && python /Applications/PyCharm.app/Contents/plugins/python-ce/helpers/packaging_tool.py install langchain
不过更推荐用方案2,操作更简单。
内容的提问来源于stack exchange,提问作者Mazze

