【问题标题】:confusion with results of `python setup.py install --user`与`python setup.py install --user`的结果混淆
【发布时间】:2013-09-29 03:23:04
【问题描述】:

假设我有一个要安装的 python 应用程序,如果我运行 python setup.py install --user,所有内容都会按预期放入 ~/.local(在 linux 上),其中包含 ~/.local/lib/python2.7/site-packages/ 中的内容 按预期被 PYTHONPATH 看到;但是,我的由setup.py 创建的可执行文件(使用entry_points 通过setuptoolsscripts 通过distutils)被正确放入~/.local/bin,但在命令中的PATH 看不到线。

因此,我必须将$HOME/.local/bin 添加到我的PATH(通过我的.zshrc)才能让我的环境看到这些可执行文件。我假设这是预期的行为,但我的问题是,当我在安装过程中使用--user 标志运行安装时,是否有某种方法可以让我的可执行文件“注册”到我的 PATH 中?

我相信这应该可行,因为我看到ipython 做了类似的事情,如果它安装了--user 标志(到~/.local),那么你不必添加到你的路径@ 987654338@ 以获取在命令行中看到的ipython 的本地安装。我只是不知道ipython 是如何做到的。非常感谢。

【问题讨论】:

    标签: python installation setup.py


    【解决方案1】:

    为什么不使用 --user,而不是使用 virtualenv?它们更加灵活,并且在激活时将其 bin 目录放在路径上。

    否则,您需要手动将 ~/.local/bin 放在您的 PATH 上,就像您所做的那样。

    【讨论】:

    • 我将~/.local 用于一个有点复杂/特定的用例,我无法使用virtualenv(即,通过ssh 跨多个计算集群节点执行远程命令,其中~/.local 被正确转发,但 virtualenv 在我的情况下无法正常工作)。无论如何,我只是看不到 ipython 是如何将自己置于系统 PATH 中的,因此不需要将 ~/.local/bin 显式添加到环境 PATH 中。
    • 经过一些测试......它没有。我从我的系统中卸载了 ipython,用 unix find 命令确认了它的删除,通过python setup.py install --user 安装了 ipython,它没有放在我的路径中。此外,在检查 ipython 安装脚本的源代码后,我看不到任何会覆盖其脚本安装位置或修改路径的内容。如果您在 ~/.local 之外安装了 ipython,则该脚本将运行,并且它将从 ~/.local 导入其模块,因为这在 python 路径中会更高。旧命令,新库。
    • 啊,明白了,呵呵!感谢您检查这一点。这正是正在发生的事情——我安装了 ipython 的本地版本(在 ~/.local 中),但没有将 ~/.local/bin 添加到我的路径中;当我调用 ipython 时,它一定是在 /usr/bin 中调用服务器范围的 ipython 可执行文件,它随后调用/加载了我本地安装的版本 b/c 我的本地版本在 sys.path 之前被引用。感谢您指出这一疏忽!
    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 2015-07-30
    • 1970-01-01
    • 2022-11-08
    • 2019-10-24
    • 1970-01-01
    • 2011-10-17
    • 2018-04-25
    相关资源
    最近更新 更多