这是一个众所周知的问题,特别是如果您在工作流程中使用一次性实例,它可能成为生产力的主要障碍。每次想连接到远程系统时,都会导致20分钟的强制休息时间。不可接受。
看起来PyCharm在远程助手文件夹中创建了一个build.txt文件,其中只包含当前PyCharm版本号,例如:
PY-171.4694.38
可以通过在 /Applications/PyCharm.app/Contents/helpers/
上手动使用 rsync
并最终手动创建一个带有当前构建编号的 build.txt 文件来手动上传 helpers。之后,PyCharm 就不会尝试重新上传它们。
示例:
$ rsync -avz /Applications/PyCharm.app/Contents/helpers/ cluster:/home/xapple/.pycharm_helpers/
$ echo "PY-171.4694.38" > /home/xapple/.pycharm_helpers/build.txt
$ python /home/xapple/.pycharm_helpers/pydev/setup_cython.py build_ext --inplace
在我的情况下,通过Pycharm将多个项目投射到远程服务器上。当其中一个项目在远程服务器上出现问题时,所有项目都会停滞。解决方案:只保留需要工作的一个项目,并通过"Invalidate caches"重新启动PyCharm。
/Applications/PyCharm.app/Contents/helpers/
已经不存在了,因此之前的技巧不再适用。~/.pycharm_helpers
目录。
3.重新启动PyCharm并让它完成其工作。在我的情况下观察到的是,如果在PyCharm仍在运行的情况下,我将笔记本电脑移动并连接到不同的局域网,那么我启动的下一个远程调试会话将触发漫长的helper上传。事实证明,在这种情况下实际上上传的helpers目录的内容与远程系统上该目录中已经存在的内容完全相同(我进行了比较),因此这次上传完全是多余的,但是PyCharm无法检测到这一点。
由于我不知道在PyCharm中绕过或取消自动helpers上传的方法,因此唯一的选择是在每次更改网络连接后完全退出PyCharm(关闭所有打开的项目窗口)并重新启动IDE。根据我的经验,这将导致helper上传在“检查远程helpers”阶段成功,在实际上传所有helpers之前。当然,如果您打开了多个项目,这会带来很大的麻烦,但它比等待(数十)分钟的极其缓慢的helpers上传要快。
helpers
目录(在Linux上,它是应用程序安装位置的子目录)的内容传输到远程系统(在Linux上,它是~/.pycharm_helpers,其中~是用于远程调试会话的用户名的主目录),并更新helpers目录中的远程build.txt
文件以使用新的PyCharm版本即可。在我的情况下(macOS - Mojave),关闭防火墙解决了问题。请注意,这不是通用解决方案,因为它没有在任何其他环境/操作系统中进行测试。
rm -rf /root/.pycharm_helpers
这会强制Pycharm从头开始重新上传所有文件,但至少不会停在上传助手的进程。
请记住,由于这是pycharm项目的通用目录,如果您删除此目录且在该服务器上有其他项目,则可能需要等待助手为它们上传。没有影响我的项目,但您需要考虑一下。
现在是2023年,不幸的是之前提到的任何答案都不再起作用了(至少对我来说是这样)。我所做的是:
/root/.pycharm_helpers
(已经提到过)tar
helpers.tar.gz
我不知道操作系统是否有旧版本的 tar 有问题,或者必须手动完成,但它可以工作。
快速(我和DigitalOcean之间少于3秒)解决方案,受到优秀xApple的答案的启发
在远程服务器上:
export SOURCE=<your ip>
export PORT=9000
export HELPERS=$HOME/.pycharm_helpers
# PyCharm Help -> About
export BUILD=PY-172.4343.24 # 2017/10/11
cd $HELPERS
rm -fr *
# my OS - ubuntu, change firewall rules to yours if you're not so lucky
sudo ufw allow from $SOURCE proto tcp to any port $PORT
netcat -l -v -p $PORT | tar xz # here you waiting for connection
# after finish
sudo ufw delete allow from $SOURCE proto tcp to any port $PORT
echo -n $BUILD > build.txt
python $HELPERS/pydev/setup_cython.py build_ext --inplace
在您的工作站上:
export TARGET=<remote server ip>
export PORT=9000
export HELPERS=<path to helpers> # for me it's $HOME/opt/pycharm-2016.3/helpers
cd $HELPERS
tar cfz - . | netcat -v $TARGET $PORT