簡體   English   中英

在SLURM中使用sbatch命令時如何導入本地python模塊

[英]How to import a local python module when using the sbatch command in SLURM

我正在使用集群管理器slurm ,我正在使用sbatch運行提交腳本(使用python interpeter)。 sbatch提交導入了我的一個名為main_nn.py模塊。 該模塊與我的提交目錄位於同一位置,但是,即使該文件存在,python也無法找到它。 我很難搞清楚為什么會發生這種情況。 我的python文件如下所示:

#!/usr/bin/env python
#SBATCH --job-name=Python

print('hi')

import main_nn

但是我的slurm轉儲文件的輸出是:

hi
Traceback (most recent call last):
    File "/home/slurm/slurmd/job3223398/slurm_script", line6, in <module>
        import main_nn
ImportError: 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以在包/庫中進行思考?

當Slurm將提交腳本復制到計算節點上的特定位置以運行它時,您的Python腳本將找不到提交目錄中的模塊。

但是Slurm正確設置了當前的工作目錄,因此您可以使用以下內容將其顯式添加到python路徑:

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

靠近腳本的開頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM