【问题标题】:Pycharm doesn't recognize packages with remote interpreterPycharm 无法识别带有远程解释器的包
【发布时间】:2023-01-30 21:00:48
【问题描述】:

TL;DR - 这是一个 PyCharm 远程解释器问题。

远程库未正确同步,PyCharm 在使用远程解释器时无法正确索引。一切运行良好。

以下是整个(目前未成功)调试过程

请参阅更新部分以缩小问题范围


我正在使用由 python -m venv venv 创建的虚拟环境,然后像我一直使用 ssh 解释器一样指向它。 conda 也会发生同样的情况。

配置好解释器后,很多安装的包被PyCharm标红,不给自动补全,不知道这些包。

这是requirements.txt文件,与pip install -r requirements.txt一起使用

--index https:<our_internal_pypi_server>
--extra-index-url <some_external_pypi_server>
algo_api>=2.5.0
algo_flows>=2.4.0
DateTime==4.7
fastapi==0.88.0
imagesize==1.4.1
numpy==1.23.1
opencv_python==4.6.0.66
overrides==6.1.0
pydantic==1.9.0
pymongo==4.1.1
pytest==7.1.2
pytorch_lightning==1.6.4
PyYAML==6.0
scikit_learn==1.1.3
setuptools==59.5.0
tinytree==0.2.1
#torch==1.10.2+cu113
#torchvision==0.11.3+cu113
tqdm==4.64.0
uv_build_utils==1.4.0
uv_python_utils>=1.11.1
allegroai
pymongo[srv]

这里是pip freeze

absl-py==1.3.0
aggdraw==1.3.15
aiohttp==3.8.3
aiosignal==1.3.1
albumentations==1.3.0
algo-api==2.5.0
algo-flows==2.4.0
allegroai==3.6.1
altair==4.2.0
amqp==5.1.1
anomalib==0.3.2
antlr4-python3-runtime==4.9.3
anyio==3.6.2
astunparse==1.6.3
async-timeout==4.0.2
attrs==20.3.0
bcrypt==4.0.1
bleach==5.0.1
boto3==1.26.34
botocore==1.29.34
cachetools==5.2.0
certifi==2022.12.7
cffi==1.15.1
charset-normalizer==2.1.1
clearml==1.8.3
click==8.1.3
commonmark==0.9.1
contourpy==1.0.6
cpu-cores==0.1.3
cryptography==38.0.4
cycler==0.11.0
DateTime==4.7
decorator==5.1.1
deepmerge==1.1.0
dnspython==2.2.1
docker-pycreds==0.4.0
docopt==0.6.2
docutils==0.19
dotsi==0.0.3
efficientnet==1.0.0
einops==0.6.0
entrypoints==0.4
fastapi==0.88.0
ffmpy==0.3.0
fire==0.5.0
Flask==2.2.2
flatbuffers==1.12
focal-loss==0.0.7
fonttools==4.38.0
frozenlist==1.3.3
fsspec==2022.11.0
furl==2.1.3
future==0.18.2
gast==0.4.0
gitdb==4.0.10
GitPython==3.1.29
google-auth==2.15.0
google-auth-oauthlib==0.4.6
google-pasta==0.2.0
gradio==3.15.0
grpcio==1.51.1
gunicorn==20.1.0
h11==0.14.0
h5py==3.7.0
httpcore==0.16.3
httpx==0.23.1
humanfriendly==9.2
idna==3.4
image-classifiers==1.0.0
imageio==2.23.0
imagesize==1.4.1
imgaug==0.4.0
importlib-metadata==5.2.0
importlib-resources==5.10.1
imutils==0.5.4
inflection==0.5.1
iniconfig==1.1.1
itsdangerous==2.1.2
jaraco.classes==3.2.3
jeepney==0.8.0
Jinja2==3.1.2
jmespath==1.0.1
joblib==1.2.0
jsonschema==3.2.0
keras==2.9.0
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.2
keyring==23.13.1
kiwisolver==1.4.4
kmeans1d==0.3.1
kornia==0.6.8
libclang==14.0.6
linkify-it-py==1.0.3
luqum==0.11.0
Markdown==3.4.1
markdown-it-py==2.1.0
MarkupSafe==2.1.1
maskrcnn-benchmark==1.1.2+cu113
matplotlib==3.6.2
mdit-py-plugins==0.3.3
mdurl==0.1.2
ml-distillery==1.0.1
more-itertools==9.0.0
multidict==6.0.3
networkx==2.8.8
numpy==1.23.1
oauthlib==3.2.2
omegaconf==2.3.0
opencv-python==4.6.0.66
opencv-python-headless==4.6.0.66
opt-einsum==3.3.0
orderedmultidict==1.0.1
orjson==3.8.3
overrides==6.1.0
packaging==22.0
pandas==1.5.2
paramiko==2.12.0
pathlib==1.0.1
pathlib2==2.3.7.post1
pathtools==0.1.2
pika==1.3.1
Pillow==9.3.0
pkginfo==1.9.2
pluggy==1.0.0
ply==3.11
promise==2.3
protobuf==3.19.6
psd-tools==1.9.23
psutil==5.9.4
py==1.11.0
pyasn1==0.4.8
pyasn1-modules==0.2.8
pyclipper==1.3.0.post4
pycocotools==2.0.6
pycparser==2.21
pycpd==2.0.0
pycryptodome==3.16.0
pydantic==1.9.0
pyDeprecate==0.3.2
pydub==0.25.1
pygit2==1.11.1
Pygments==2.13.0
pyhumps==3.8.0
PyJWT==2.4.0
pymongo==4.1.1
PyNaCl==1.5.0
pyparsing==2.4.7
pyrsistent==0.19.2
pytest==7.1.2
python-dateutil==2.8.2
python-multipart==0.0.5
pytorch-lightning==1.6.4
pytz==2022.7
PyWavelets==1.4.1
PyYAML==6.0
qudida==0.0.4
readme-renderer==37.3
requests==2.28.1
requests-oauthlib==1.3.1
requests-toolbelt==0.10.1
rfc3986==1.5.0
rich==12.6.0
rsa==4.9
s3transfer==0.6.0
scikit-image==0.19.3
scikit-learn==1.1.3
scipy==1.9.3
SecretStorage==3.3.3
segmentation-models==1.0.1
sentry-sdk==1.12.1
setproctitle==1.3.2
shapely==2.0.0
shortuuid==1.0.11
six==1.16.0
sklearn==0.0.post1
smmap==5.0.0
sniffio==1.3.0
starlette==0.22.0
tensorboard==2.9.1
tensorboard-data-server==0.6.1
tensorboard-plugin-wit==1.8.1
tensorflow==2.9.1
tensorflow-estimator==2.9.0
tensorflow-io-gcs-filesystem==0.29.0
termcolor==2.1.1
threadpoolctl==3.1.0
tifffile==2022.10.10
timm==0.5.4
tinytree==0.2.1
tomli==2.0.1
toolz==0.12.0
torch==1.10.2+cu113
torchmetrics==0.9.0
torchtext==0.11.2
torchvision==0.11.3+cu113
tqdm==4.64.0
twine==4.0.2
typing-utils==0.1.0
typing_extensions==4.4.0
uc-micro-py==1.0.1
urllib3==1.26.13
uv-build-utils==1.4.0
uv-envyaml==2.0.1
uv-python-serving==2.0.1
uv-python-utils==1.12.0
uvicorn==0.20.0
uvrabbit==1.4.1
validators==0.20.0
vine==5.0.0
wandb==0.12.17
webencodings==0.5.1
websockets==10.4
Werkzeug==2.2.2
windshield-grid-localisation==1.0.0.dev5
wrapt==1.14.1
yacs==0.1.8
yarl==1.8.2
zipp==3.11.0
zope.interface==5.5.2

以下最小测试程序

import pytest
import uv_python_utils
from importlib_metadata import version as version_query
from pkg_resources import parse_version
import requests


installed_pytest_version = parse_version(version_query('pytest'))
installed_uv_python_utils_version = parse_version(version_query('uv_python_utils'))
installed_importlib_metadata_version = parse_version(version_query('importlib_metadata'))
print(installed_pytest_version)
print(installed_uv_python_utils_version)
print(installed_importlib_metadata_version)

与输出一起运行

7.1.2
1.12.0
5.2.0

但在 IDE 中,它看起来像这样:

Here 是 JetBrains 的支持票(不确定是否对所有人可见)。他们还帮不上忙。

他们提供了,我做了以下所有没有帮助的事情:

  1. 删除远程~/.pycharm_helpers
  2. 寻求帮助 |查找操作...并搜索“注册表...”。 在注册表中,搜索 python.use.targets.api 并将其禁用。 重新配置您的项目解释器。

    他们查看了来自“帮助”->“收集日志和诊断数据”的“日志”(不确定是哪个日志),并看到了以下内容

    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)
    2022-12-15 11:14:42,932 [ 478638] WARN - net.schmizz.sshj.xfer.FileSystemFile - Could not set permissions for C:\Users\noam.s\AppData\Local\JetBrains\PyCharm2022.3\remote_sources\-2115534621\.\site-packages__1.zip to 1a4
    2022-12-15 11:14:42,986 [ 478692] WARN - net.schmizz.sshj.xfer.FileSystemFile - Could not set permissions for C:\Users\noam.s\AppData\Local\JetBrains\PyCharm2022.3\remote_sources\-2115534621\.\.state.json to 1a4
    2022-12-15 11:14:43,077 [ 478783] WARN - net.schmizz.sshj.xfer.FileSystemFile - Could not set permissions for C:\Users\noam.s\AppData\Local\JetBrains\PyCharm2022.3\remote_sources\-2115534621\.\python3.8.zip to 1a4
    

    不过,我找不到任何许可违规行为。

    我还尝试从本地和远程清除 Pycharm 中的所有内容,然后重新安装,但这种情况仍然存在。

    1. 卸载 PyCharm,安装为同事工作的旧版本(在同事的同一目录下的同一远程工作,因此问题是本地的)
    2. 删除.idea
    3. 删除C:\Users\noam.s\AppData\Roaming\JetBrains
    4. 显然我试过使缓存无效并重新启动。

      这些库不会下载到外部库[见下方更新],如项目菜单所示,与pip freeze不符

      在 venv 案例中:

      在 conda 情况下,下载的远程库甚至与 Pycharm 解释器屏幕不一致!

      这真的让我很难工作,而且我找不到任何解决方法。 有任何想法吗?


      更新 - 当 Pycharm 尝试从 skeletons.zip 解包时出现问题。

      我找到了避免“红色”的解决方法:

      1. 在资源管理器中打开远程库

        1. 删除该文件夹。
        2. 从 skeletons.zip 中手动提取文件夹
        3. 重新索引pycharm

        这给出了以下警告:

        ! Attempting to correct the invalid file or folder name
        ! Renaming C:\Users\noam.s\AppData\Local\Temp\Rar$DRa30340.29792\756417188\uvrabbit\aux.py to C:\Users\noam.s\AppData\Local\Temp\Rar$DRa30340.29792\756417188\uvrabbit\_aux.py
        

        但允许我开始工作。不过,在我看来,这不是一个有效的解决方案,因为它需要手动处理,而不是让 IDE 完成它的一项工作。


        1. 为什么会这样?
        2. 如何解决?
        3. 如何避免?

【问题讨论】:

    标签: python windows pycharm remote-debugging


    【解决方案1】:

    问题是其中一个包 (uvrabbit) 中名为 aux.py 的文件。

    Naming files aux in Windows is forbidden。很高兴知道。

    这使得自动解包崩溃,因此索引失败。它也使 git clone 失败了 [这就是我最终找到它的方式]。

    手动解包时,Winrar 将aux.py 重命名为_aux.py,从而绕过了大部分问题。

    更改文件名并将包更新为没有名为aux 的文件的版本解决了它。


    所以直接回答

    1. 因为其中一个包有一个名为aux.py的文件
    2. 重命名文件 [从 Linux 计算机!]
    3. 切记不要在 linux 中将文件命名为aux,以免破坏 Windows。 [或者不要使用 Windows]。

    【讨论】:

      【解决方案2】:

      我之前遇到过这个问题,结果证明是因为我在创建解释器时错过了一个重要步骤。在图片中显示的这一部分确保

      1. 您正在选择远程环境 bin 下的 python 版本
      2. 确保您选择了正确的远程路径,否则 pycharm 会将您的项目与 tmp 项目同步
      3. 不要忘记勾选自动上传项目文件到服务器

      【讨论】:

      • 我做了所有这些,如所附的屏幕截图所示。所有的映射都是正确的。
      • 当你在 pycharm 中打开你的 python 控制台时,它是否连接到你的虚拟环境?
      • 是的,正如问题中所述。一切运行良好。
      • 我看不出这个答案是如何获得 +2 票的,很明显它甚至没有远程回答这个问题。
      【解决方案3】:

      当我正在寻找完全相同问题的解决方案时,谷歌把我带到了这里。我正在使用PyCharm 2022.3.1

      我在关注你的“更新" 步骤,但是:

      1. 在资源管理器中打开Remote Libraries
      2. 删除您在那里看到的所有目录。我的是:
      3. Remote Libraries条目应该消失
      4. 关闭项目和/或重新打开 Pycharm
      5. 用远程解释器打开你的项目
      6. 只要 PyCharm 连接到远程解释器,骨架更新就会立即开始。
      7. Remote Libraries条目应该自动重新添加
      8. 不再有丢失包错误

        我很好奇你是否已经尝试过这个。

      【讨论】:

      • 不,这不起作用,因为出于某种原因自动提取 skeletons.zip 失败
      • 请参阅我的答案以了解造成这种情况的原因
      猜你喜欢
      • 2022-10-04
      • 2022-01-12
      • 2016-09-06
      • 2013-10-03
      • 1970-01-01
      • 2017-07-12
      • 2020-11-04
      • 2013-03-06
      • 1970-01-01
      相关资源
      最近更新 更多