前言
最近需要部署一下生成对抗网络的开发环境,我自己的笔记本没有带显卡,想到实验室的服务器有带显卡索性就用实验室服务器的环境开发,通过pycharm的远程开发功能连接到服务器,本来以为轻轻松松就可以开始写代码了,结果发现了一系列关于虚拟环境的pip下载包问题,总结如下:
- Pycharm上本地pip安装包,使用本地pip,不会保存到linux服务器,没有使用与远程服务器保持一致的pip
- Pycharm上手动安装包,由于连接了远程服务器pycharm自动使用pip保持一致,如下图所示,会同步到远程
- 远程服务器上pip安装包(权限不允许),没有激活虚拟环境,全局pip下载,权限不允许,添加–user选项,依旧是本地与远程pip不一致
- 远程服务器上pip安装包带–user选项,软件包下载在.local文件夹中
- 远程服务器上使用虚拟环境的pip去安装包,全局pip覆盖了虚拟环境的pip,pip仍旧不一致
- 远程环境上进入虚拟环境bin目录,使用对应虚拟环境的pip下载,成功将下载软件包同步到本地pycharm
连接步骤
下载程序包通过pycharm手动安装,远程服务器同步更新软件包
那么远程服务器下载的软件包,本地pycharm是否也是同步呢,首先激活远程服务器的虚拟环境。pip下载包没有同步到本地pycharm,这是什么原因呢。查看环境变量发现端倪,PATH环境变量中只有全局pip的路径,虚拟环境中的pip路径不存在,所以就算是激活了虚拟环境pip下载的软件包仍然是下载在全局环境,如果想要把软件包下载在当前用户目录下,使用pip的–user选线,该选项会在 /home/用户/ 目录下新建一个.local文件,所有pip --user下载的软件包都会保存在.local文件夹下。
由于在使用pycharm远程连接服务器时,使用的是.virtualenv文件夹中的python解释器,所以只用使用.virtualenv中的pip.exe下载的软件包才会同步到pycharm中(使用.virtualenv中的pip.exe得使用绝对路径否则又会使用全局pip下载到全局环境中)
所以得出结论,pycharm远程连接使用的是哪个虚拟环境的python解释器就需要使用哪个虚拟环境的pip下载包,需要注意环境变量覆盖虚拟环境pip的问题。