Bash 模块加载路径环境变量

Bash 模块加载路径环境变量,bash,numpy,environment-modules,Bash,Numpy,Environment Modules,我目前正在远程服务器上工作(通过ssh),需要加载一些模块(模块加载[package1][package2]ecc)。具体来说,numpy版本1.15.2是必需的,但在包含所有numpy版本的目录中,只有1.14.0版本 无论如何,我能够得到包numpy/1.15.2--python--3.6.4(我显然没有权限在包含其他版本的numpy的目录中复制),所以我想知道是否可以(以及如何)临时更改环境变量路径,以便指定(只有在这种情况下)“模块加载”应该查找的位置,而不是像其他模块一样使用通常的存储

我目前正在远程服务器上工作(通过ssh),需要加载一些模块(模块加载[package1][package2]ecc)。具体来说,numpy版本1.15.2是必需的,但在包含所有numpy版本的目录中,只有1.14.0版本

无论如何,我能够得到包numpy/1.15.2--python--3.6.4(我显然没有权限在包含其他版本的numpy的目录中复制),所以我想知道是否可以(以及如何)临时更改环境变量路径,以便指定(只有在这种情况下)“模块加载”应该查找的位置,而不是像其他模块一样使用通常的存储库。

暂时更改环境变量路径

我认为最简单的方法是使用修改后的路径创建子shell,并在其中工作:

PATH=modifiedpath bash 
这是否有效,取决于您在.bashrc中对路径所做的具体操作。如果您在那里重新分配旧的路径,您的更改将丢失,在这种情况下,您可以改为执行

PATH=modifiedpath bash --norc
绕开soucring.bashrc。当然,这意味着.bashrc中的别名、函数和非导出变量也不可用

如果这也会导致问题,您可以留在shell中,但暂时保护路径:

origpath=$PATH
PATH=modifiedpath
... do your work
PATH=$origpath # restore it

您可以拥有自己的modulepath,以取代您使用的系统上管理员提供的modulepath

只需创建一个目录结构,然后在其中添加您自己的
numpy/version
modulefile(这样的modulefile应该定义环境变量以使用您特定的numpy包安装)


最后添加的modulepath具有更高的优先级,因此当您执行
module load numpy
命令时,它将加载特定的numpy modulefile,而不是默认提供的numpy modulefile。

通常,对于导入模块,您需要更改Python中的
PYTHONPATH
sys.path
,不是系统范围的
路径(用于查找可执行文件,而不是Python模块)。此外,所有环境变量更新本质上都是临时的,除非您特意生成永久更改它们的代码或配置,因此,实际上根本不清楚您要求的是什么。路径更改应该在
.bash\u profile
(或者只是
.profile
)中进行,而不是
.bashrc
,因此如果有人遵循良好的实践,交互式非登录shell将只继承其父进程的路径,而不重写其任何部分。(
.bashrc
用于别名和非导出变量等不通过环境共享的内容)。对于永久性更改,可以。OP明确要求暂时改变,在我看来,这确实是有道理的。例如,在某个地方安装了新版本的程序后,我这样做是为了测试。在这种情况下,我有一个shell在路径中有新的目录,另一个shell有旧的设置,我可以很容易地比较这些设置。我不是说如何进行永久性的更改。我的观点是,如果bash是根据最佳实践/约定配置的,
.bashrc
不会停止
PATH=modifiedpath bash-I
工作,即使没有
--norc
@CharlesDuffy:if
.bashrc
将新目录填充到路径的末尾,modifiedpath将此处可能需要关注的目录放在路径的开头,这样就可以了。我们不知道OP如何编写他的.bashrc,我也不知道
模块加载如何摆弄路径。我不能在这里争辩……你说的是真的。我只是说,创建了.bashrc修改路径的人做得不对,因为只有.bash_配置文件应该这样做;当一个交互shell启动的进程启动第二个交互shell时,它们会产生不希望的副作用,比如追加同一字符串的多个副本。
$ mkdir ~/modulefiles
$ mkdir ~/modulefiles/numpy
$ $EDITOR ~/modulefiles/numpy/<version>
$ module use ~/modulefiles