Python 奇点行为:shell vs exec
所以我试图调试我在HPC安装程序中遇到的一个错误。我不会详细讨论这个错误,因为它是特定于包的,我很确定这是一个环境变量类型的问题。也就是说,这个软件包是neuron,如果有人对它和singularity有经验,我将非常感谢您的输入 当我使用以下工具在本地测试所有内容时:Python 奇点行为:shell vs exec,python,debugging,hpc,singularity-container,neuron-simulator,Python,Debugging,Hpc,Singularity Container,Neuron Simulator,所以我试图调试我在HPC安装程序中遇到的一个错误。我不会详细讨论这个错误,因为它是特定于包的,我很确定这是一个环境变量类型的问题。也就是说,这个软件包是neuron,如果有人对它和singularity有经验,我将非常感谢您的输入 当我使用以下工具在本地测试所有内容时: singularity exec --bind ./:/mnt container.sif my_script.py 没有问题。但是,同一命令在HPC群集上出错。我开始尝试在本地重新创建错误,以查看问题所在 由于我仍然不知道
singularity exec --bind ./:/mnt container.sif my_script.py
没有问题。但是,同一命令在HPC群集上出错。我开始尝试在本地重新创建错误,以查看问题所在
由于我仍然不知道的原因,我在集群上得到的错误可以通过向exec
命令添加--containall
标志在本地复制。事实上,即使是--contain
标志也可以重现错误。我可以从--contain
的文档中看到:
使用最小的/dev和空的其他目录(例如/tmp和$HOME),而不是从主机共享文件系统
这让我猜测这是一个路径/环境问题,但我不是100%确定,因为我对所有不是python的东西都还不熟悉
为了尝试解决这个问题,我尝试使用singularity shell
重新创建错误。这就是我希望有人能为我澄清的地方。如果我这样做:
singularity shell --containall --bind ./:/mnt container.sif
cd /mnt
python3 my_script.py
脚本运行良好,没有错误。然而,当我跑步时:
singularity exec --containall --bind ./:/mnt container.sif python3 /mnt/my_script.py
我得到的错误与我在集群上得到的错误相同
这两种方法有什么不同?为什么对容器进行炮击会起作用,而像这样执行它却不起作用?我只是想寻求帮助,找出如何调试它的方法
此外,为什么脚本可以在本地运行,但不能在HPC上运行?我对容器的理解是,它们应该允许脚本在不同的系统上运行,因为所有内容都包含在容器中。在这些不同的场景中,我允许什么阻止我运行代码
我的直觉(不是很有经验)告诉我,当我使用shell时(或者当我在本地运行脚本时),我正在执行一些环境变量,而当我以其他方式运行它时,我正在丢失这些变量,但是我不确定从何处开始寻找这样的东西,或者如何将其保存在容器中
编辑:
我还在HPC中尝试炮击容器,但我得到了相同的错误。因此,在我的本地计算机上,当我在shell中或在没有--contain
标志的情况下执行脚本时,会用到一些东西
版本:
- 奇点3.5
- Python 3.6.9
- 神经元8.0
-e
/--cleannev
来捕捉这一点。使用该选项时,仅在singularity环境中设置前缀为SINGULARITYENV\uz
的变量。e、 例如,要使NEURON\u HOME=/mnt/NEURON
在运行singularity命令之前,您将使用export singularity env\u NEURON\u HOME=/mnt/NEURON
一旦您确定了要更新的变量是什么,您就可以在
%environment
或%post
中正常添加它,不管您喜欢什么。如果该值随环境而变化,则可以在SINGULARITYENV\u VARNAME
如何安装NEURON中导出该值?编译自己或pip安装?在配方文件的%post部分编译自己(使用自动工具)您能分享您的奇点定义文件吗?这可能是环境变量的问题。