在Win10的Ubuntu子系统中安装FEniCS

5 篇文章 0 订阅
2 篇文章 0 订阅

作者:刘亚卓,修正:汪思聪

众所周知,Win10是最好的Linux发行版。通过Win10的WSL功能,可以轻松实现Linux系统的安装与使用,基本可以满足大部分人对Linux的需求。本文会详细的介绍Ubuntu子系统的安装与FEniCS的配置。

当然,如果你想要在虚拟机上安装fenics,请移步另一篇博客:FEniCS应用(0):初入Linux,如何在Ubuntu18.04上通过anaconda安装FEniCS有限元框架_仰望天空的蚂蚁的博客-CSDN博客


第一步:将Ubuntu子系统安装至非系统盘

网上有很多教程说让通过微软官方商店安装ubuntu子系统,然后在用LxRunOffline工具将子系统从系统盘迁移至非系统盘。这样的操作非常容易因其子系统的崩溃或是无法打开,下面我将介绍另一种方式直接将ubuntu子系统安装至你想要安装的地方。

启用win10自带的“适用于Linux的Windows子系统”功能

打开 程序面板——程序——启用或关闭Windows功能

勾选“适用于Linux的Windows子系统”,确定

 

 下载Ubuntu子系统安装包

前往微软官方网站:Manual installation steps for older versions of WSL | Microsoft Docs

找到相应的Linux发行版子系统安装包,本文以Ubuntu18.04为例。

 如果觉得直接访问微软官网下载速度过慢,也可以访问下方链接,我已经将子系统安装包上传作为免费下载资源了。注意下载后需要解压

Ubuntu18.04安装包:Window10上Ubuntu18.04子系统官方手动安装包-Linux文档类资源-CSDN下载

Ubuntu20.04安装包:Windows10上Ubuntu20.04子系统官方手动安装包_Ubuntu子系统如何下载安装包-Linux文档类资源-CSDN下载

下载完成后将安装包(后缀名为:.appx)保存在你希望安装子系统的路径上。

在非系统盘安装Ubuntu18.04子系统

打开Windows PowerShell (管理员),用cd命令切换进入子系统安装包所在路径,并通过ls或者dir命令查看安装包是否存在,例如

cd E:\WindowsSubsystem\

dir

 发现存在后缀名为.appx的文件后,即可确认路径正确。图中可以看到我的安装包名字为:Ubuntu.appx

以下部分内容引自微软官方帮助文档,由“仰望星空的蚂蚁”翻译。原文网址:Install Linux Subsystem on Windows Server | Microsoft Docs

 对安装包执行解压缩:

在PowerShell中输入如下命令:

Rename-Item .\Ubuntu.appx .\Ubuntu.zip  #修改文件后缀使安装包成为压缩包
Expand-Archive .\Ubuntu.zip .\Ubuntu    #解压缩至Ubuntu文件夹

注意在自己安装的过程中需要将文件名“Ubuntu.appx”更改为自己安装包的文件名,通常可以通过输入部分文件名后按Tab键自动补全。

添加子系统路径为环境变量

进入子系统路径,将子系统路径添加进入用户环境变量。

复制如图所示路径

进入高级系统设置——点击环境变量

选中用户变量中的Path项,点击编辑,在弹出的页面中点击新建,输入刚才复制的路径,点击确定即可完成环境变量的添加。

 

 当然追求高端的玩家也可以选择在PowerShell中以命令行的形式添加环境变量,代码如下:

$userenv = [System.Environment]::GetEnvironmentVariable("Path", "User") #获取现有环境变量
[System.Environment]::SetEnvironmentVariable("PATH", $userenv + ";E:\WindowsSubsystem\Ubuntu", "User")  #在现有环境变量后增加一行路径

 执行Ubuntu安装

双击打开路径中的Ubuntu1804.exe即可自动进入系统初始化过程

或是在PowerShell中对应目录以命令行形式运行Ubuntu1804.exe

.\Ubuntu1804.exe

 等待约5分钟后,会要求输入UNIX用户名和密码,注意输入密码时不会显示输入了什么,但事实上已经输入了,不要重复输入即可。至此,子系统安装完成。

注意:想要进入Ubuntu子系统同样需要双击这个ubuntu1804.exe建议发送桌面快捷方式。

解压安装后,更换国内源之前,应当关闭Ubuntu命令行(输入exit,回车)打开资源管理器,在地址栏输入

\\wsl$

查看是否出现如图所示远程硬盘:

若无如图所示远程文件夹,请再打开Ubuntu命令行,再刷新文件管理器查看是否出现上图所示文件夹

若出现,请右键该文件夹,选择“映射网络驱动器”,出现下图所示界面(因笔者已映射,因而显示盘符为Y而非Z):

按此情况(即只有打开ubuntu命令行时远程文件夹才出现)上图所示地址栏中应会出现

Ubuntu-18.04 (或其他版本的子系统)

此为Windows的一个bug,及自动填写的地址错误且无法手动修正,此问题会导致在不打开命令行时无法远程访问子系统,也会导致后面无法用VScode编辑(按理来说VScode远程打开命令行后应当等同于直接打开命令行,但经笔者尝试似乎并不可行,但笔者当时并未特别关心命令行是否已被VScode打开,也许是笔者当时尚未等VScode打开命令行便尝试打开文件,因而出现无法访问wsl

此问题解决方案很简单,卸载Ubuntu后升级windows即可(理论上不卸载也没关系,但笔者没有尝试),根据

Could not mapping path \\wsl$\<distro_name> to network drive · Issue #3854 · microsoft/WSL · GitHub

将系统版本升级至18342及以上即可解决,笔者升级结果如下:

已解决以上问题

若打开命令行后仍无显示远程文件夹,此为另一个问题,GitHub上有较多讨论,但笔者尚未遇到,也未根据GitHub上的讨论结果归纳出解决办法,在此不予置评。

第二步:更换国内源

双击Ubuntu1804.exe进入根目录,先备份源列表文件

sudo mv /etc/apt/sources.list /etc/apt/sources.list.backup

然后通过nano写入源列表文件,这里推荐南科大源

sudo nano /etc/apt/sources.list

复制下方源网址,在nano环境中用ctrl+u然后右键粘贴

deb https://mirrors.sustech.edu.cn/ubuntu/ bionic main restricted universe multiverse 
deb https://mirrors.sustech.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.sustech.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.sustech.edu.cn/ubuntu/ bionic-security main restricted universe multiverse 
deb https://mirrors.sustech.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.sustech.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.sustech.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.sustech.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.sustech.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.sustech.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

然后用ctrl+O,回车保存,ctrl+X退出编辑器,此时换源已经完成。

感谢南方科技大学开源软件镜像站(SUSTech Open Source Mirrors),祝南方科技大学越办越好。新 · 益求新,创 · 领未来。

如果遇到:无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?

尝试如下命令:

sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock

 注意:Ubuntu20.04不能应用南科大源和中科大源,建议采用阿里云源:

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

 完成换源候请习惯性对系统进行更新:

## 更新包列表
sudo apt update

## 更新安装包
sudo apt upgrade

## 执行自动清理
sudo apt autoclean

第三步:安装Anaconda

在终端直接输入命令:

wget https://repo.anaconda.com/archive/Anaconda3-2020.11-Linux-x86_64.sh

然后打开终端,在其中输入如下命令:

bash Anaconda3-2020.11-Linux-x86_64.sh

如果有报错,在上一行命令后面加 -u

安装的最后一步会询问是否需要conda initiate程序进行配置,默认是no,这里选择yes。

如果需要将ubuntu中的默认python关联为anaconda中的python,则在conda initiate步骤中选择no并执行如下步骤:

安装完成后在终端输入:

sudo nano ~/.bashrc

在文件最后添加:

export PATH="/home/xupp/anaconda3/bin:$PATH"

然后用ctrl+O,确认文件名后回车保存,ctrl+X退出编辑器后在终端输入

source ~/.bashrc

重启终端

此时可以在终端中输入python检查是否安装成功,如果出现如下所示的anaconda字样说明安装成功

(base)username@computername:~$ python

Python 3.7.6 (default, Jan  8 2020, 19:59:22) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.

如果不懂得如何安装,可以参考Ubuntu18.04 安装 Anaconda3_梦Dancing的博客-CSDN博客_ubuntu安装anaconda

重启终端后,用户名前会出现(base)字样,这是因为anaconda的base环境自启动了,可以通过如下命令关闭base环境自启动

## 永远关闭base环境自启动
conda config --set auto_activate_base false

## 只关闭本次自启动的base环境(事实上可以关闭任何已经进入的环境)
conda deactivate

此时,anaconda安装完成。

第四步:安装FEniCS有限元框架主体(请看完这一部分再动手安装)

将fenics安装进入base环境(优先推荐)

直接将fenics框架安装进入base环境中可以免去许多麻烦,例如:

  • spyder安装进其他环境报错的问题
  • 应用conda install安装库函数时可能出现的不兼容问题(如下方第五步所讲)

采用如下命令

## 关闭任何已经打开的环境
conda deactivate

## 打开base环境
conda activate base 

## 更新conda,使其保持在最新版
conda update --all

## base环境下安装fenics
conda install -c conda-forge fenics

将fenics安装进入一个新的fenicsproject环境(不推荐)

执行如下命令:

conda create -n fenicsproject -c conda-forge fenics

等待安装完成后,可以尝试启动该环境:

source activate fenicsproject
或
conda activate fenicsproject

每一次当你需要调用fenics时,都需要执行conda activate fenicsproject命令。

第五步:安装fenics所需要的库函数

## 安装python的各种库函数 numpy matplotlib pandas等
conda install numpy
conda install matplotlib
conda install pandas

一般情况下,anaconda新创建的fenicsproject环境会内置numpy库函数,采用如下命令检查是否已经内置

conda list

 第六步:安装mshr包

注意此时应该在base环境中或者是在自己创建的fenicsproject环境中

##进入主目录
cd ~

##从GitHub上拉取mshr包用作备份
git clone https://bitbucket.org/fenics-project/mshr


## 进入anaconda3目录
cd anaconda3

## 从GitHub上克隆mshr包的源代码
git clone https://bitbucket.org/fenics-project/mshr

然后开始编译安装mshr包,首先检查cmake版本

## 检查cmake版本
cmake --version

截至目前,cmake的版本是3.19.1,较低的cmake版本(例如低于3.10.1)可能会导致后续报如下所示的错误

CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.

如果这个报错出现,那么大概率是由于cmake版本过低导致的,可以通过如下命令来解决。

sudo apt install cmake

在cmake版本没有问题的情况下,执行如下代码即可完成mshr包的安装。

## 编译安装mshr包
cd mshr
mkdir build
cd build
cmake ..
sudo make install

其中cmake ..这一步容易出现问题,假如出现projram killed error,不要灰心,重新执行cmake ..命令即可。

如果在make install这一步中报如下所示错误,

Install the project...
-- Install configuration: ""
-- Installing: /usr/local/lib/libmshr.so.2019.2.0.dev0
CMake Error at cmake_install.cmake:60 (file):
  file INSTALL cannot copy file
  "/home/username/anaconda3/mshr/build/libmshr.so.2019.2.0.dev0" to
  "/usr/local/lib/libmshr.so.2019.2.0.dev0".

这是因为make安装时需要管理员权限,可以采用在make install前面加sudo解决。但是这也同时产生了问题,那就是sudo创建的文件,在本用户下是无法访问的,这也就导致build目录下的install_manifest.txt无法被访问,所以当调用的时候会报找不到模组的错误。

在终端中执行如下命令:其中username为你的用户名,chown的作用是改变文件的所有者。

sudo chown username install_manifest.txt

至此,安装结束

第七步:检查安装

首先需要重启WSL子系统,由于WSL是基于LxssManager服务运行的,因此可以通过重启LxssManager服务来重启WSL,步骤如下:

以管理员身份运行CMD

输入如下代码

## 关闭LxssManager服务
net stop LxssManager

## 重启LxssManager服务
net start LxssManager

此时已经完成了Ubuntu的重启,下面需要检查mshr包何fenics是否安装完成:在命令行中输入如下命令:

## 激活环境
conda activate base
## 启动python
python
## 检查mshr包安装情况
from mshr import *
## 检查fenics安装情况
form fenics import *

如果都没有报错,说明安装成功。

第八步:代码可视化

访问VS code官网 Visual Studio Code - Code Editing. Redefined

下载安装VS code,在VS code的插件栏中安装Remote - WSL插件

 点击左下角的><图标,选择New WSL window即可进入Ubuntu子系统操作界面

 至此,写代码,运行程序都可以正常进行了。

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值