【发布时间】:2015-06-19 04:18:56
【问题描述】:
在我们拥有的 Linux 计算集群环境中,我们之前会在集群头节点上的 /opt 下安装我们需要的不同版本的 python,并将 /etc/exports 配置为 NFS 导出 /opt/pythonX.Y 到计算节点用于从头节点安装。但是,我们最近搬到了 SAN 上更具弹性的存储位置,该存储位置安装在整个集群上。例如,我们将 /opt/python2.7 和 /opt/python3.3 从头节点同步到挂载的 SAN 上的新路径,但问题是它们的 bin/ 子目录下的许多 *.py 文件仍然有shebang 指向旧的 /opt 路径,因此将其保留为依赖项。
我认为在 SAN 上重新安装 python 会很容易,而是通过使用“pip freeze > packagelist.txt”转储 /opt python 安装中的当前包,然后使用“pip -r packagelist”重新安装.txt',但这样做是安装所有的鸡蛋(预期),但几乎没有相应的 bin 脚本(意外)。当用户开始抱怨当他们的 .bashrc 指向新的 SAN 路径来运行 python 时,使用许多 *.py bins/scripts 的 bash 脚本中断时,我很快发现了这一点,主要是因为所有 *.py 脚本(它们是/opt安装路径下)不在SAN的pythonX.Y/bin/下,虽然对应的egg都安装到了site-packages目录下。
我一直试图了解鸡蛋和脚本之间关于安装和目录(输出)位置的关系,我发现 setup.py 必须在 setup() 中指定一个“scripts=”参数此 SE 问题中提到的功能:setup.py and adding file to /bin/。
我是一个非开发人员,甚至不使用 python 编写代码,但是有人可以帮助我理解为什么使用 freeze/-r (--requirement) 的 pip “重新安装”会将鸡蛋安装到 site-packages/ 但是不是 bin/ 的脚本?如果它们不是来自同一个包或安装,那么它们来自哪里?如果您需要更多细节,请告诉我。
【问题讨论】: