在Python中启动项目时,我想将一些环境变量保存在名为environment_variables
的文件中,并将该文件源于bashrc。
该文件看起来像这样:
username=$(whoami)
# project root path
export PROJECT_DIR='/home/'$username'/nuclei_segmentation/'
# project data path
export DATA_DIR=$PROJECT_DIR"data/"
# location of models
export MODEL_DIR=$PROJECT_DIR"models/"
# project output data
export OUTPUT_DIR=$PROJECT_DIR"output/"
我想更改PROJECT_DIR
路径,因此它与平台/名称无关。因此,此environment_variables
文件将始终位于项目的根目录中,并且我希望将PROJECT_DIR
设置为始终是environment_variables
文件的位置。
我以为我可以用PWD
执行此操作但是当从bashrc调用时会产生错误,我还想到了一个使用find从根目录中搜索文件的解决方案,但这似乎很复杂并且认为在那里必须是更好的方式吗?
答案 0 :(得分:1)
如果我完全理解你想要的地方,我的推荐是
在一些更具体的结论中,一个名为项目根的变量应该是你真正需要的。如果预期的文件在当前目录中,则不要求设置它。
export NUC_SEG_DIR=$HOME/nuclei_segmentation
在Python代码中,输入合理的默认值。在这种特殊情况下,期望os.path.join(os.environ['NUC_SEG_DIR'], 'data')
指向您的data
目录等。如果用户想要覆盖它,那么使用符号链接就足够了。确保在代码中对其进行参数化,以便在将来可以配置时,可以在单个位置轻松覆盖。也许像是
def nuc_seg(root_dir=os.environ['NUC_SEG_DIR'], data_dir='./data', model_dir='./models', output_dir='./output'):
if root_dir == '':
root_dir='.'
... your code here
以后可能会使用命令行界面让用户通过命令行选项或配置文件覆盖这些值。
同样,不要求用户编辑他们的.bash_profile
或类似内容 - 如果他们想在不同的目录中运行多个实验,或者其他什么?他们可以弄清楚如何使环境变量永久化,或者如果不希望您的用户熟悉shell的基础知识,您甚至可以将其记录为选项。
答案 1 :(得分:-1)
在脚本文件中使用dirname $0
查找当前脚本文件所在的目录