配置便捷的开发环境(PyCharm & Jupyter)

由于在PyCharm中进行统计整理数据、画图等操作有诸多的不便。在本地的jupyter notebook进行处理又显得步骤繁琐(传输文件),故萌生在服务器搭建jupyter notebook的想法。两种工具优势互补,从而最大程度上集中注意力在项目本身,提升开发效率。


“工欲善其事,必先利其器”,接下来看看如何用PyCharm和Jupyter配置最便捷的python开发环境。

PyCharm

pycharm_start.png

一打开软件界面,满满的科幻感迎面扑来。用色块构建的魔幻画面好似一张变形金刚的面庞。最新的版本加入了默认的Vim编辑模式,让强大的PyCharm更如猛虎添翼一般。

基础配置

打开设置界面的快捷键是Ctrl+Alt+S

  • 背景色:软件默认的背景是白色的,这显然不符合我们广大程序员的审美。File -> Appearance &Behaior -> Appearance 中可以修改, Darcula 是常用的黑色主题。

  • 字体:不出意外的话,你会认为它的字体有些小。File -> Editor -> Font 中可以放大,console中的代码和编辑区的代码设置方式类似。

  • 主题:如果对默认主题的配色不满意,可以在 File -> Editor -> Color Scheme 中修改。

  • 代码风格:在 File -> Editor -> Code Style 中,可以对不同类型的代码文件可以分别进行个性化设置。

代码模板

懒人改变世界,而程序员往往都很懒。。。能让计算机手工完成的内容绝对不会自己动手重复添加。

不难发现,在程序开发过程中,有一些代码基本没有变化,而且我们会经常性的重复使用。那么,这种傻傻很麻烦的事情最适合计算机来自动完成了。显然,开发PyCharm的程序员小哥想到了这一用户痛点。

File -> Editor -> File and Code Templates 中,我们可以将常用的文件类型中的一些常用代码写入该类型文件的默认模板中,例如。

1
# -*- coding: utf-8 -*-

除此之外,还可以在文件开头添加一些注释信息。如下所示:

pycharm_templates.png

版本控制

一个好的开发环境不可能没有版本控制系统。

PyCharm内置了CVS、Git、Mercurial、Subversion等多种版本控制工具,我们只需要简单的配置即可使用。

从github上Clone 代码,上传保存,进行版本控制,多人协同开发,统统可以在软件内轻松地完成。

远程调试

这是一个超级良心的免费功能,我相信即使这个功能收费,也会有很多程序员小哥继续使用PyCharm。在其他的地方写代码,我们都需要在本地调试好,再上传服务器。出问题后,再次修改,再次上传,非常浪费时间。那么如何简化本地代码和服务器代码之间的沟通工作呢?PyCharm也帮我们内置好了。

Tools -> Deployment -> Configurtion中可以配置好多台服务器,如果服务器中的python环境配置良好,我们就不需要再单独在本地配置一遍。配置如下所示:

pycharm_connection.png

在对应的位置填写好服务器的位置,自己的用户名和密码,以及想要打开的根目录(节省重复打开文件夹的时间)。

第二个选项卡Mappings中配置本地项目和服务器项目对应的映射关系。这里有个需要注意的地方,建议只将代码和训练语料分开存储,不要使训练语料成为映射项目的一部分,加快加载速度。在第一次配置好开发环境的时候,需要将服务器的一些文件下载到本地,需要稍等几分钟,以后就很幸福了!

Tools -> Deployment -> Configurtion中选择本地文件的上传方式,我这里将Ctrl+S设置为本地保存并上传服务器。

Jupyter-notebook

对于jupyter notebook来说,它的缺点还是十分明显的。没有一个很好的框架,不能清晰的构建大型项目。也不曾拥有IDECtrl+点击函数名就可以跳转的方便功能,导致阅读代码吃力。

但同样的,它的对于PyCharm的优点也是无可替代的。

  • PyCharm简直是一个科学计算的神奇,在做数据挖掘的时候,代码和报告(支持latex公式)高度融合,无需二次撰写。
  • 在处理数据的时候,所有中间结果不会被擦除,都显示在对应的cell下面。方便调试,减轻记忆的工作量。
  • 方便的图表展示,不像PyCharm那样,会新弹出一个窗口展示图片,图文融合在一起。
  • 丰富的插件支持,高度自定义。
  • 等等……

虽然优点众多,但如果只能在本地运行也只能算是鸡肋。经常将工程中的部分文件从服务器传输到本地再分析,这是一件很累人的事情。

服务器jupyter搭建

  • 首先保证我们的linux服务器的python(Anaconda)环境已经配置好了。

  • 打开Ipython,输入如下两行代码后,会生成一个字符串,例如”sha1:9305015210b4:32cad364c85e7f7a13b9efa137cfadf633cc62d“。请复制出来暂时保存,稍后会使用。

1
2
from notebook.auth import passwd
passwd()
  • 如果~/.jupyter路径下没有 jupyter_notebook_config.py ,则输入如下命令新建它。
1
jupyter notebook --generate-config
  • 新产生的文件中的所有内容都以注释的形式存在,直接在文件末尾加入如下几行代码,并根据自己的环境调整路径。
1
2
3
4
5
c.NotebookApp.ip = '*'  # 允许访问此服务器的 IP,星号表示任意 IP
c.NotebookApp.password = u'sha1:xxx:xxx' # 之前生成的密码 hash 字串
c.NotebookApp.open_browser = False # 运行时不打开本机浏览器
c.NotebookApp.port = 12035 # 使用的端口
c.NotebookApp.enable_mathjax = True # 启用 MathJax
  • 由于大家公用的服务器,我并没有管理员权限,不能将jupyter notebook添加为系统级别的服务。我们只需执行如下命令就可以方便的在本地调用jupyter notebook了(服务器不会经常重启)。
1
nohup jupyter notebook > notebook.file 2>&1 &

调用方式:在本地浏览器中输入`服务器地址:设置的端口号`即可。例如:165.32.65.109:7060

Jupyter 优化

  • 感谢造轮子的大佬 jupyter-themes ,为优化jupyter 做了一个很好的包。

  • 更换主题

    • 对于程序员来说,Jupyter默认的白色背景不是很友好,为了和黑色的Pycharm更加搭配,可以先执行如下命令安装其他主题 pip install jupyterthemes --user
    • 安装好之后的操作很简单,如下例所示。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # list available themes
    # onedork | grade3 | oceans16 | chesterish | monokai | solarizedl | solarizedd
    # 列出所有可用的主题
    jt -l

    # select theme...
    # jt -t 主题名
    jt -t chesterish

    # restore default theme
    # NOTE: Need to delete browser cache after running jt -r
    # If this doesn't work, try starting a new notebook session.
    # 恢复默认主题
    jt -r

    # 更改主题,改变代码字体,改变代码大小,改变cell占屏幕宽度,
    jt -t oceans16 -f fira -fs 12 -cellw 90%
  • 自动代码补全

    • 虽然Jupyter也可以代码补全,但是总是需要多此一举的按一个Tab键,与PyCharm风格不搭配。

    • 方法一:执行ipython profile create 命令, vim ~/.ipython/profile_default/ipython_config.py,修改成如下样子。重启jupyter后生效

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      ## Activate greedy completion PENDING DEPRECTION. this is now mostly taken care
      # of with Jedi.
      #
      # This will enable completion on elements of lists, results of function calls,
      # etc., but can be unsafe because the code is actually evaluated on TAB.
      c.Completer.greedy = True

      ## Experimental: restrict time (in milliseconds) during which Jedi can compute
      # types. Set to 0 to stop computing types. Non-zero value lower than 100ms may
      # hurt performance by preventing jedi to build its cache.
      c.Completer.jedi_compute_type_timeout = 400

      ## Experimental: Use Jedi to generate autocompletions. Off by default.
      c.Completer.use_jedi = True
    • 方法二:安装如下插件,如果报错,还需要更新配置一些包环境:

1
2
pip install jupyter_contrib_nbextensions --user
pip install jupyter_nbextensions_configurator --user
1
2
3
4
pip install --upgrade ipykernel --user
chmod 777 ~/.local/share/jupyter/
pip install --upgrade --user nbconvert
pip install --upgrade jupyter_core jupyter_client --user

总结

至此,PyCharm 和 Jupyter 都已经配置完毕。今后PyCharm仍然是主力的代码编辑工具。但在工程构建过程中,免不了许多中间结果需要分析和查看,这个时候Jupyter就可以派上用场。进行轻量的模块化分析任务。另外,Jupyter也可以打开文本文件进行编辑(可以自由选择Vim/Sublime等编辑模式),这样就不用使用WinSCP来单独查看文件;Jupyter也可以打开Terminal,这样我们就不用再单独使用Xshell,Xming等软件。释放本地内存。

我们只需要开启浏览器和PyCharm就可以方便交互服务器,进行代码的版本控制,以及进行数据分析。接下来可以更加愉快的干活了!

-------------本文结束 感谢您的时间-------------
0%