本文的目的是介绍在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模块)
- linux – 为什么在使用sbatch SLURM时我会继续使用NonZeroExitCode?
- PyCharm中使用SSH Interpreter解释器,ubuntu切换python2和python3问题
- pycharm中使用正则表达式批量添加print括号,完美从python2迁移到python3
- PyCharm如何导入python项目,并配置虚拟环境
在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?
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目录设置为我有权限的地方.
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
网络下载的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后,点击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项目,并配置虚拟环境的相关知识,请在本站进行查询。
本文标签: