Stata_kernel 的“炼丹”之旅

1. 关于 stata_kernel

stata_kernel 主要是用于statajupyter lab交互的内核,通过stata_kernel为桥梁建立statajupyter lab间的联系后便可以在vscodeIDE中使用stata并且会得到相应IDE插件生态的支持,实现语法高亮、检查语法错误等一系列高级功能。

不过,stata_kernel面临两个致命性的发展瓶颈,一是stata_kernel的作者已经弃坑,现在该项目基本处于半死不活的状态,全靠各位“大能”用爱发电,如果你使stata16及以下版本是完全没有问题的,如果使用stata17及以上版本目前已知的最严重的问题是部分图版无法输出,好在社区已经解决该问题,后继本文将会对这一问题进行探讨;二是为适用广大用户的这类需求,stata官方也作出回应,开发了pystata这一python这一模块,可以直接在python调用stata命令,两者的差别在于stata_kernel试图在jupyter lab中搭建一个相对纯粹的stata的使用环境,目的是充分利用jupyter lab社区资源,而pystata的目的在于statapython的协同作战,目的在于利用python优秀的编程功能和强大的数据处能力,作为一个成年人你是想做选择还是想全要,选择权在你。

笔者对这一问题的理解是这样的,stata作为一款优秀的统计软件使用起来是非常不错的,最适合拿来应急的时候使用,然而它的缺点也是十分明显的,一是贵而且是很贵,并不是一般人能够独立承担的,如果你免强入“坑”会面临很多功能上的限制,二是好用意味着同pythonRjulia等主流软件相比它既不够精细又不够快速,综上所述如果希望有所建树的“童鞋”还是以stata作为“起手式”尽快过渡到pythonRjulia等主流软件。

2. 本文的主要内容

关于stata_kerneljupyter交互的内容网上已有诸多讨论,其中做的比较好的可能要属连玉君的团队,网上其他的贴子或多或少都有他们贴子的影子,当然也可能是他们借鉴其他人的贴子,本文对此不做更多阐述,无意引战只是说一下他人的贡献。本文与其他贴子的不同之处在于,其他贴子的注意力主要集中在stata_kernelwindows环境下的使用,使用场景相对单一,而本文更关注其在LinuxMac环境下的使场景;以往的贴子很少针对stata_kernel的疑难杂证进行论述,本文尝试在这一方面作出努力,因此本文并不适合对以上系统没有使用经验的“小白”用户,而是面向进阶用户,“小白”用户切勿浪费时间。

  • Linuxstata的安装
  • Linux&Macstata_kernel的安装
  • 关于Linux&Macstata_kernel相关疑难杂证的处理

3. Linux下stata的安装

笔者使用wsl中的linux子系统安装stata,在安装过程中笔者参考网上已有教程并结合stata的官方手册对现有贴子中有误的地方进行了订正。

  • 在写本部分之前由于中间发生很多不得不中止的事情,很多过程并未保留图片,只能给出命令和部分图片,以后有机会可能会对过程图片进行补充
  • 建立一个用于存放stata安装包的目录并将stata压缩包解压到此处
cd
mkdir statainstall
tar -xvzf Stata14Linux64.tar.gz -C statainstall
  • 建立stata的安装目录并建立软连接
  • 注意安装stata的全过程应给予管理员权限,要么切换用户,切要么使用sudo给予权限

参照stata的官方手册,建立软连接的目的在于风险隔离,一方面可以让你在系统中保留多个版本的stata,另一方面则在于保证使用体验的稳定性,主要是stata升级后stata的路径会发生一些改变,这就导致用户在使用原来的stata命令时会无法找到该命令,还有许多系统设定也会因引用原来的位置而无法找到stata,使用软连接则可以完美解决该问题。至于什么是软连接以及它的作用,本文不再赘述。

cd
sudo mkir /usr/local/stata17
sudo ln -s /usr/local/stata17 /usr/local/stata

在这里插入图片描述

  • stata安装到指定目录,此处指安装到stata17文件夹,具体视个人情况而定
cd /usr/local/stata17
sudo ~/statainstall/install
  • 测试stata是否安装成功

stata在售的有三种版本,对应的启动命令分别是:
BE版:stata
SE版:stata-se
MP版:stata-mp
需要注意的是,不同版使可用的命令是不同的
BE版:stata
SE版:stata stata-se
MP版:stata stata-se stata-mp
还有一点需要注意的是,Linuxstata也提供图形界面,对应的命令是xstata,用xstata替换stata启动相应版本的图形界面

  • stata的认证

windowsMac不同,Linux下的认证需要先填写证书,然后再填写用户名,最后需要填写一个地址
本文给出windows下的填写事例以供参考

cd /usr/local/stata17
sudo ./stinit

在这里插入图片描述

  • stata目录添加到临时环境变量
PATH=$PATH:usr/local/stata
export PATH
  • BE版测试
stata

在这里插入图片描述

  • SE版测试
stata-se

在这里插入图片描述

  • MP版测试
stata-mp

在这里插入图片描述

  • stata命令添加到环境变量的持久化,笔者使用的是zsh,只编辑.zshrc的环境变量部分即可
  • 只需要将stata路径添加到环境变量的最即可
cd
vim .zshrc

在这里插入图片描述

  • 当然还有第二种方法,直接在.zshrc的最后追加一行
  • 本文并建议采用这种方式,可以但没必要
echo export PATH="/usr/local/stata:$PATH" >> ~/.zshrc
  • 重新加载配置文件,以使环境变量生效
source  ~/.zshrc
  • 关于stata的升级和卸载

版本的升级,如由stata16升级到stata17,只需重复上述步骤并重新建立软连接即可
卸载则只需将相应的安装的文件夹删除即可

sudo rm -r /usr/local/stata16

4. Linux&MAC下stata_kernel的安装

  • stata_kernel下的环境搭建

经过测试,stata_kenerl能最高可以运行在python3.9环境,高于此版本stata_kenerl可能会出现各种莫名其妙的问题,请各位看官谨慎对待

  • 本文使用miniconda搭建stata_kernel的运行环境
 conda create --name stata17 python=3.9 jupyterlab
 conda install -c conda-forge stata_kernel
 python -m stata_kernel.install
  • jupyter labstata美化

主要是语法高亮
理论上来说,如果仅使用jupyter lab来调用stata的话,到这里就可以了

conda install -c conda-forge nodejs -y
jupyter labextension install jupyterlab-stata-highlight

在这里插入图片描述

  • vscode中调用stata_kernel

vscode中调用stata_kernel需要对jupyter lab进行配置以使vscode能够长期稳定的接入jupyter lab

  • 生成jupyter lab的配置文件

jupyter lab配置文件的默认位置在根目录下的.jupyter/jupyter_lab_config.py

jupyter lab --generate-config
  • 修改配置文件

c.ServerApp.allow_remote_access: 设置允许远程访问
c.ServerApp.local_hostnames:设置主机名,如果在vps上请使用IP地址,如果本地访问请保持默认
c.ServerApp.port:设置 jupyter lab 启动时所用的端口号
c.ServerApp.root_dir:设置启动后的jupyter lab的根目录
c.ServerApp.token:设置token方便vscode配置jupyterl ab
token的设置是随意的,可以去Online UUID Generator获得一个唯一的UUID作为token使用
c.ServerApp.browser :设置 jupyter lab 的默认浏览器

vim .jupyter/jupyter_lab_config.py
c.ServerApp.allow_remote_access = True 
c.ServerApp.root_dir = '/home/ubuntu/jupyter'
c.ServerApp.token = '10678062-09e5-4f7a-992a-19f3aab87c82' 
import webbrowser
webbrowser.register("msedge",None,webbrowser.GenericBrowser(u"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe"))
c.NotebookApp.browser = "msedge"

在这里插入图片描述
在这里插入图片描述

  • vscde配置

Ctrl+shift+P 打开命令输入框
Jupyter: Create:New Jupyter Notebook
Jupyter: Existing jupyter server..
Enter the URL of the running Jupyter server中填入对应的网址,笔者是本地搭建故使用127.0.0.1
http://127.0.0.1:8888/lab?token=10678062-09e5-4f7a-992a-19f3aab87c82
然后右下角会提示重启vscode,重启后,就可以创建一个笔记本用了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5. Linux&Mac下stata_kernel的相关疑难杂症

  • 不出意外的话,就出意外了
  • 问题1:ModuleNotFoundError: No module named 'notebook'

遇到这个问题原因应该是stata_kernel太久没有更新,导致其用到的相关依赖在jupyter lab的后续更新中被抛弃,只要装上相关依赖就可以了
解的方法有两个,但第二个方法笔者并未验证

conda activate stata17
python -m pip install jupyter
conda activate stata17
pip install notebook
  • 问题2:stata重装、原来的stata_kernel删除或者是stata升级后,重新搭建的stata_kernel环境无法找到stata导致stata_kernel无法启动而被删除

要解决这个问题大概分两步,一是删除安装在jupyter lab中的stata_kernel并重新安装,二是修改stata相关的配置文件

在这里插入图片描述

  • 删除已安装在stata_lab中的stata_kernel并重装
conda activate stata17
jupyter kernelspec list
jupyter kernelspec remove stata
python -m stata_kernel.install
  • 修改stata相关配置文件
  • 首先删除与之前stata版本相对应的stata隐藏文件夹.stata17
  • 其次修改.stata_kernel.confstata的引用路径
  • 相关配置文件的位置均在根目录
  • 此时将stata路径配置为stata_path = /usr/local/stata/stata-mp的优势就体现出来了,如果开始直接就引用这个路径,这一问题也许压根就不会出现

在这里插入图片描述

cd
ls -al
rm -r .stata17
vim .stata_kernel.conf
  • 这里同时解决了另一个问题,那就是在Linux下通常默认引用stata导致无法在jupyter lab中调用stata-sestata-mp从而限制stata性能的发挥,手动修改引用程序的位置后便可便意切换stata的版本
    在这里插入图片描述
  • 问题3:升级到stata17后出现部分图象无法显示
  • 这个问题的出现是因为stata17stata_kernel不兼容导致的,解决的方法就是用githubstata_kernel的开版覆盖旧版本的stata_kernel,即用githubstata_kernel项目中的stata_kernel文件夹来替换本机的stata_kernel文件夹
  • 对于这一问题本文仅提供一种思路和解决方案,具体效果并未验证
  • Linuxstata_kernel的安装位置为:
    /home/ubuntu/.asdf/installs/python/miniforge3-4.10.3-10/lib/python3.9/site-packages/stata_kernel
  • Macstata_kernel的安装位置为:
    /opt/homebrew/Caskroom/miniconda/base/envs/stata17/lib/python3.9/site-packages/stata_kernel
  • Windows10stata_kernel的安装位置为:
    D:\miniconda3\envs\stata_env\Lib\site-packages
  • Limux
cd
mv /home/ubuntu/.asdf/installs/python/miniforge3-4.10.3-10/lib/python3.9/site-packages/stata_kernel /home/ubuntu/.asdf/installs/python/miniforge3-4.10.3-10/lib/python3.9/site-packages/stata_kernel.old
git clone https://github.com/kylebarron/stata_kernel.git
cp -r stata_kernel/stata_kernel /home/ubuntu/.asdf/installs/python/miniforge3-4.10.3-10/lib/python3.9/site-packages/
rm -r stata_kernel
  • Mac
cd 
mv /opt/homebrew/Caskroom/miniconda/base/envs/stata17/lib/python3.9/site-packages/stata_kernel /opt/homebrew/Caskroom/miniconda/base/envs/stata17/lib/python3.9/site-packages/stata_kernel.old
git clone https://github.com/kylebarron/stata_kernel.git
cp -r stata_kernel/stata_kernel /opt/homebrew/Caskroom/miniconda/base/envs/stata17/lib/python3.9/site-packages/
rm -r stata_kernel

在这里插入图片描述

后记

至此,Linux&Mac下关于stata_kernel的几乎所有的问题都应该可解决,如果不能的话,就劝你放弃吧,毕竟stata_kernel的发展似乎也已经进入瓶颈,某种程度上来说,“弃坑”也许是更好的选择。

  • 附赠一段查看stata基本信息的小程序

从最终呈现的结果来看,在WSL中的Linux可以使用计算机的全部硬件资源,因此限制WSL中软件性能的可能就它的资源利用效率了

local system_first 当前日期 当时间 当版本号 命令编版本 当前运行版本的发布日期 当前操作系统数位 当前所使用的Stata是否业SE版 当前Stata是否为MP版	当前Stata/MP版处理器核心数 当前Stata/MP版得到许可的处理器核心数 ///
	当前运行Stata/MP版核心数 当前stata/MP版能够使用的最大处理器核数 Stata运行在什么交互方式的计算机系统上 当前否窗口运行方式 当前使用的计算机系统类型 主机名 计算机类型 字节顺序 当前用户身份

local system_second current_date current_time stata_version version born_date bit SE MP processors processors_lic processors_mach processors_max mode console os hostname ///
	machine_type byteorder username

local i = 1

while `i' < 20{
	local nmf: word `i' of `system_first'
	local nms: word `i' of `system_second'
	disp "`nmf' `c(`nms')' "
	local ++i
}
  • 结果
当前日期 11 Apr 2023 
当时间 13:44:18 
当版本号 17 
命令编译版本 17 
当前运行版本的发布日期 20 Apr 2021 
当前操作系统数位 64 
当前Stata是否业SE版 1 
当前Stata是否为MP版 1 
当前Stata/MP版处理器核心数 8 
当前Stata/MP版得到许可的处理器核心数 8 
当前运行计算机处理器的核心数 8 
当前stata/MP版能够使用的最大处理器核数 8 
当前Statar运行方式否为交换互  
当前stata是否以窗口方式运行 console 
当前使用的计算机操作系统类型 Unix 
主机名 DESKTOP-3ICDEFB 
计算机类型 PC (64-bit x86-64) 
机算机字节顺序 lohi 
当前用户身份 ubuntu 

参考文献

  1. stata_kernel
  2. Installing Stata in Linux
  3. 如何设置环境变量?
  4. 如何更新Stata软件的信息?
  5. jupyter–lab 配置文件jupyter_lab_config.py
  6. 在-Linux-上安装-Stata
  7. Jupyter与Stata关联-stata_kernel
  8. Downloading and installing Stata on Linux
  9. jupyter notebook 删除指定kernel
  10. 朝花夕拾 | Stata的环境参数及提取
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值