![](/img/trans.png)
[英]How does one make sure that the python submission script in slurm is in the location from where the sbatch command was given?
[英]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.