如何为Linux /usr/local/bin下的Python脚本合理组织依赖?
你这个顾虑完全没问题——把非独立可执行的Python共享模块直接丢/usr/local/bin确实不太符合Linux文件系统的常规规范,毕竟/usr/local/bin是专门给独立可执行程序预留的目录,丢个只能被其他脚本导入的模块进去,不仅会让这个目录变杂乱,也不符合FHS(文件系统层次结构标准)的设计初衷。
这里给你几个更合规、也更易维护的替代方案:
方案一:用系统级Python包目录存放共享模块
把你的deps.py作为项目专属的Python模块,安装到对应版本的Pythonsite-packages目录下(比如RHEL9默认Python3.9的话,路径是/usr/lib/python3.9/site-packages/)。这样你的各个脚本里直接写import deps就能调用共享代码,完全不用处理路径问题,而且符合Python官方的包管理习惯。
用RPM打包时,只需要在spec文件的%files段里加上这个模块的路径就行,比如:%files /usr/local/bin/your-script1.py /usr/local/bin/your-script2.py /usr/lib/python3.9/site-packages/deps.py方案二:创建项目专属的共享目录
在/usr/local下专门建一个存放项目共享模块的目录,比如/usr/local/lib/python/your-project-name/,把deps.py放进去。然后在每个需要调用共享代码的脚本开头,加一段路径配置:import sys sys.path.insert(0, '/usr/local/lib/python/your-project-name') import deps这个方案的好处是不会污染系统级的
site-packages目录,所有项目相关的共享代码都集中存放,后续维护、升级也更清晰。RPM打包时,记得先创建这个目录(可以在spec的%install段用mkdir -p命令),再把模块文件复制进去。额外小提醒
不管用哪个方案,都要注意文件权限:可执行脚本(/usr/local/bin下的那些)权限设为755,共享模块文件权限设为644,这样既保证脚本能被执行,又避免模块被意外修改。
其实调整之后,脚本的整洁度不会打折扣,反而能避免后续因为目录结构不规范带来的各种小问题,比如脚本路径变化导致import失败、其他工具扫描/usr/local/bin时误把模块当成可执行程序等。
备注:内容来源于stack exchange,提问作者kmalarski

