GVKun编程网logo

在SLURM中使用sbatch命令时如何导入本地python模块(python 导入so模块)

22

本文的目的是介绍在SLURM中使用sbatch命令时如何导入本地python模块的详细情况,特别关注python导入so模块的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面

本文的目的是介绍在SLURM中使用sbatch命令时如何导入本地python模块的详细情况,特别关注python 导入so模块的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解在SLURM中使用sbatch命令时如何导入本地python模块的机会,同时也不会遗漏关于linux – 为什么在使用sbatch SLURM时我会继续使用NonZeroExitCode?、PyCharm中使用SSH Interpreter解释器,ubuntu切换python2和python3问题、pycharm中使用正则表达式批量添加print括号,完美从python2迁移到python3、PyCharm如何导入python项目,并配置虚拟环境的知识。

本文目录一览:

在SLURM中使用sbatch命令时如何导入本地python模块(python 导入so模块)

在SLURM中使用sbatch命令时如何导入本地python模块(python 导入so模块)

我正在使用集群管理器Slurm,并且正在运行带有sbatch的提交脚本(带有python
interpeter)。sbatch提交导入了我的一个名为的模块main_nn.py。该模块与我的提交目录位于同一位置,但是,即使文件存在,python也无法找到它。我很难弄清楚为什么会这样。我的python文件如下所示:

#!/usr/bin/env python#SBATCH --job-name=Pythonprint(''hi'')import main_nn

但是我的Slurm转储文件的输出是:

hiTraceback (most recent call last):    File "/home/slurm/slurmd/job3223398/slurm_script", line6, in <module>        import main_nnImportError: No module named main_nn

我尝试检查模块main_nn是否在当前目录中,并且确实存在。因此,对我来说可疑的第一件事是Slurm文件中的错误表明我的脚本的位置位于"/home/slurm/slurmd/job3223398/slurm_script"而不是path_to_project。因此,我继续增加了一行

os.system(''pwd'')

看看我的脚本在哪里执行,令我惊讶的是它在哪里执行,path_to_project而不是在"/home/slurm/slurmd/job3223398/slurm_script"那个地方执行,这一定意味着sbatch在执行某个脚本时很时髦,但又在另一个位置执行了脚本。如果是这种情况,我应该如何在python中与模块中的提交脚本位于同一位置的位置进行导入?我是否被迫将其放在软件包中并欺骗python以使其在软件包/库中?

答案1

小编典典

当Slurm将提交脚本复制到计算节点上的特定位置以运行它时,您的Python脚本将找不到提交目录中的模块。

但是Slurm正确设置了当前工作目录,因此您可以使用类似以下内容的方法将其显式添加到python路径:

sys.path.append(os.getcwd())

在脚本开头附近。

linux – 为什么在使用sbatch SLURM时我会继续使用NonZeroExitCode?

linux – 为什么在使用sbatch SLURM时我会继续使用NonZeroExitCode?

我有一个简单的test.ksh,我正在使用该命令运行:

sbatch test.ksh

我一直得到“JobState = Failed Reason = NonZeroExitCode”(使用“scontrol show job”)

我已经确定了以下内容:

> slurmd和slurmctld启动并正常运行
>“test.ksh”的用户权限是777.
>命令“srun test.ksh”(单独使用,不使用sbatch)成功没有问题
>我试着在“test.ksh”的最后一行输入“return 0”而没有运气
>我试着在“test.ksh”的最后一行输入“exit 0”而没有运气
>我试着在“test.ksh”的最后一行输入“hostname”而没有运气
>我尝试在“test.ksh”的最后一行输入“srun hostname”,但没有运气

解决方法

我发现我没有设置–error和–output,这意味着默认是我发出命令的当前目录.

问题是我没有足够的权限写入当前目录.

解决方案是将–error和–output目录设置为我有权限的地方.

PyCharm中使用SSH Interpreter解释器,ubuntu切换python2和python3问题

PyCharm中使用SSH Interpreter解释器,ubuntu切换python2和python3问题

(1)在 PyCharm中使用SSH Interpreter解释器的时候,由于机器默认是py2,而找不到py3。
(2)使用 :sudo update-alternatives --config python 进行Python版本选择能解决控制台的问题,却不能在PyCharm设置。

在这里插入图片描述


(3)于是简单粗暴(脚本文件可以不用写,直接使用命令切换 删除原来版本链接,新建现在版本链接):

切换成python2的文件usepy2

#!/bin/bash
cd /usr/bin
sudo rm python
ln -s /usr/bin/python2.7 /usr/bin/python

切换成python3的文件usepy3

#!/bin/bash
cd /usr/bin
sudo rm python
ln -s /usr/bin/python3.5 /usr/bin/python

直接默认py3,因为2020.1.1 py2已经将不再维护,有意识地提前选择。切换成功,在py3版本下安装的包也被更新显示了出来

在这里插入图片描述

pycharm中使用正则表达式批量添加print括号,完美从python2迁移到python3

pycharm中使用正则表达式批量添加print括号,完美从python2迁移到python3

网络下载的python代码,版本参差,从python2.x迁移python3.x的过程中,存在print语法问题,即python2.x中print无括号,python3.x中print有括号。

逐行添加括号未免效率过低,因此,可使用正则表达式的方法,提供解决方法。

1、在pycharm编译器中,Ctrl+R调出替换功能框,勾选“Regex”,选择正则表达式替换方法

2、 从上到下,第一个搜索框输入

print (.*?);?$
正则表达式 含义
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
* 匹配0个或多个的表达式
匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
() 匹配括号内的表达式,也表示一个组
; 匹配分号(虽然Python中可以在表达式结尾不加分号,但是难免有人会加)
$ 匹配输入字符串的末尾

语句含义:匹配print语句的所有部分,并将print的内容获取到第一个括号里
 

第二个替换框输入

print($1)

语句含义:替换,并且替换后的括号中的内容就是之前获取到的第一个括号里的内容

3、点击Replace all,替换所有搜索结果,完成替换

PyCharm如何导入python项目,并配置虚拟环境

PyCharm如何导入python项目,并配置虚拟环境

Pycharm导入python项目

进入PyCharm后,点击File→Open,然后在弹窗中选择需要导入项目的文件夹;

分享图片

 

打开了python项目后,需要配置该项目对应的python才可以正常运行;

配置步骤:File→settings

分享图片

 

在设置弹窗中选择Project Interpreter,然后点击add;

分享图片

 

在弹窗中,选择Existing environment,路径可以选择python项目的路径;

然后就大功告成了,可以去试着运行你的程序了~

 

分享图片

今天的关于在SLURM中使用sbatch命令时如何导入本地python模块python 导入so模块的分享已经结束,谢谢您的关注,如果想了解更多关于linux – 为什么在使用sbatch SLURM时我会继续使用NonZeroExitCode?、PyCharm中使用SSH Interpreter解释器,ubuntu切换python2和python3问题、pycharm中使用正则表达式批量添加print括号,完美从python2迁移到python3、PyCharm如何导入python项目,并配置虚拟环境的相关知识,请在本站进行查询。

本文标签: