【问题标题】:Will pip freeze/--requirement reinstall bin scripts or only eggs?pip freeze/--requirement 会重新安装 bin 脚本还是只安装鸡蛋?
【发布时间】: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/ 的脚本?如果它们不是来自同一个包或安装,那么它们来自哪里?如果您需要更多细节,请告诉我。

【问题讨论】:

    标签: python pip bin egg


    【解决方案1】:

    这可能是因为您已经通过 Python 的分发配置文件进行了 rsync。特别是 pydistutils.cfg:

    https://docs.python.org/2/install/#location-and-names-of-config-files

    为了澄清,脚本是指通常放在 PATH 中的 Python 程序,而“eggs”或以其他方式指的是 Python 程序中使用的 Python 模块和库。

    在 pydistutils.cfg 中应该有“install_scripts”或“script_dir”的设置。如果是这种情况,我敢打赌它仍然指向你的旧 python 脚本目录。

    【讨论】:

    • 我可能看错了区域,但在 /python2.7/lib/python2.7/distutils/ 中没有 *.cfg 文件,即使有 config.py。如果我可以从头开始重新安装,我会更喜欢它。因此,据您所知,pip 是否应该同时安装 python egg 库/模块和脚本可执行文件以在我的 PATH 上运行?如果是这样,使用 pip freeze/-r 是否有任何警告,或者我应该只获取 /opt 路径下安装的所有当前包的 xargs 列表(实际上是几百个包),然后进行正常的 pip 安装?谢谢。
    • 还有一个关于 pip 的问题,pip freeze 会转储所有已安装的 python 包,即使它们是使用 easy_install 安装的,甚至是直接使用“python setup.py”安装的?我的点子冻结列表确实看起来有点短,所以我想知道它是否没有收集所有内容。
    • 配置文件可能存在也可能不存在。
    • 您的 pip freeze 然后 pip install -r requirementslist.txt 方法是正确的。唯一引起注意的是脚本正在安装到较旧的脚本路径(据我所知)。 pip freeze 应该转储它可以在它的 python 包路径上找到的所有包。这些包都可以通过 $PYTHONPATH 和运行 python 的目录找到。由于 pip 是较新安装的默认设置,您确定您正在为较旧的 python 安装运行 pip 吗?
    • "唯一引起注意的是脚本正在安装到较旧的脚本路径(据我了解)。pip freeze 应该转储它可以在它的 python 包路径上找到的所有包。”对不起,如果我不清楚。它没有将脚本安装到旧位置,而是将它们安装到应该的位置。问题是它安装的脚本比旧位置少得多,这让我想知道为什么有些软件包似乎只安装了鸡蛋而不是脚本。也许较新版本的软件包有不同的脚本?
    猜你喜欢
    • 2012-05-18
    • 1970-01-01
    • 2017-03-08
    • 2015-03-13
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 2011-02-17
    • 2013-07-11
    相关资源
    最近更新 更多