Python 奇点行为:shell vs exec

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群集上出错。我开始尝试在本地重新创建错误,以查看问题所在 由于我仍然不知道

所以我试图调试我在HPC安装程序中遇到的一个错误。我不会详细讨论这个错误,因为它是特定于包的,我很确定这是一个环境变量类型的问题。也就是说,这个软件包是neuron,如果有人对它和singularity有经验,我将非常感谢您的输入

当我使用以下工具在本地测试所有内容时:

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

听起来像是环境问题:在开发环境中设置了一些集群环境中不存在的东西。默认情况下,所有环境变量都会自动转发到singularity环境。我建议使用
-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部分编译自己(使用自动工具)您能分享您的奇点定义文件吗?这可能是环境变量的问题。