当我启动PyCharm用于远程python解释器时,它总是执行"上传PyCharm助手",即使远程机器IP是相同的并且已经包含先前上载的助手。行为是否正确?
答案 0 :(得分:8)
这是众所周知的问题,如果您在工作流程中使用一次性实例,这可能是生产力的主要障碍。每次要连接到远程系统时,都会导致20分钟的强制咖啡休息时间。不可接受的。
似乎PyCharm在远程帮助文件夹中创建了一个build.txt文件,该文件只包含当前的PyCharm内部版本号,例如:
PY-171.4694.38
因此,可以使用rsync
上的/Applications/PyCharm.app/Contents/helpers/
手动上传帮助程序,最后手动创建包含当前内部版本号的build.txt文件。之后,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
答案 1 :(得分:0)
根据the docs,
PyCharm会在每次远程运行时检查远程帮助程序版本,因此如果您更新PyCharm版本,新助手将自动上传,您不需要重新创建远程解释程序。
答案 2 :(得分:0)
受excellent xApple's answer启发的快速(我之间不到3秒的数字海洋)解决方案 在远程服务器上:
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
答案 3 :(得分:0)
关闭防火墙解决了我的问题(macOS-Mojave)。请注意,这不是通用解决方案,因为未在任何其他环境/操作系统中对其进行测试。
答案 4 :(得分:0)
请注意-至少迟于2018.3.x版本-由于某些原因,当本地网络连接也发生更改时,PyCharm似乎还需要重新上传帮助程序。 / p>
在我的案例中,我观察到的是,如果在PyCharm继续运行的同时,我重新放置笔记本电脑并连接到其他局域网,那么我启动的下一个远程调试会话将触发冗长的帮助程序上传。事实证明,在这种情况下实际上载的helpers目录的内容与远程系统上该目录中已经存在的内容完全相同(我对它们进行了比较),因此此上载是完全多余的,但是PyCharm不能检测到这个。
由于我在PyCharm中没有办法绕过或取消自动帮助程序上载,因此唯一的办法是在每次更改网络连接后完全退出PyCharm(关闭所有打开的项目窗口)并重新启动IDE。以我的经验,这将导致在“再次检查远程帮助程序”阶段中成功上传帮助程序,然后再实际上载所有帮助程序。当然,如果您打开了多个项目,这将是一个很大的麻烦,但是它比等待(数十分钟)等待痛苦缓慢的助手上载完成要快。
其他响应者描述的在更改PyCharm版本时采取的所有措施都是正确的。使用rsync,ftp,scp或其他任何方法足以将新的本地helpers
目录(在Linux上,是应用程序的安装子目录)的内容传输到远程系统(在Linux上,〜/ .pycharm_helpers,其中〜是用于远程调试会话的用户名的主目录),并使用新的PyCharm版本更新helpers目录中的远程build.txt
。