【问题标题】:Messy Python install? (OS X)凌乱的 Python 安装? (OS X)
【发布时间】:2015-07-29 07:27:27
【问题描述】:

我是 Python 和 OS X 终端的初学者,我尝试为 Python 2.7.3 和 Python 3.4 安装一些包。

我无法让 mechanize 在安装后同时使用 Python 2 或 Python 3。我明白了:

>>> from mechanize import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/XXX/Desktop/mechanize-0.2.5/mechanize/__init__.py", line 119, in <module>
    from _version import __version__
ImportError: No module named '_version'

在试图了解它为什么在我的桌面上搜索模块位置(我下载源代码并从中运行 setup.py)时,我想知道我的 Python 安装是否混乱。

我在这三个我知道的不同位置找到了 Python 资料:

Macintosh HD/Library/Frameworks/Python.framework/3.4/ - [这是 Python 3 及其站点包的存储位置]

Macintosh HD/System/Library/Frameworks/Python.framework/Versions/2.7/ - [我在这里找不到任何站点包]

Macintosh HD/Library/Python/2.7/ - [此文件夹中只有站点包,没有别的]

最后一个放错了吗?

我或许应该提一下,我在终端中默认使用的是非管理员/非 sudo 用户。因此,当我安装软件包时,我会这样做:

su -l admin
sudo easy_install xxx or sudo python3 setup.py install

理想情况下,我想清理我的 Python 安装,删除我已安装的包,然后用 virtualenv 虚拟放置所有内容。

【问题讨论】:

标签: python macos python-2.7 virtualenv python-3.4


【解决方案1】:

只需在您的命令行 python3 中尝试并将其与您的脚本一起使用。并且这样跑。

python3 myscript.py

【讨论】:

    【解决方案2】:

    OS X 预装了 Python。具体哪个版本取决于您的 OS X 版本(例如,10.10 附带 2.6 和 2.7,10.8 附带 2.5-2.7 以及部分安装的 2.3,10.3 附带 2.3)。

    这些安装在/System/Library/Frameworks/Python.framework/Versions/2.* 中,它们的站点包在/Library/Python/2.* 中。 (它们位于不同位置的原因是 /System/Library 只能由操作系统安装/升级写入。)

    您无法在不破坏操作系统的情况下删除预安装的 Python 版本(即使可以,它们也只会在下一次操作系统更新时重新安装)。

    但如果您只打算使用 Python 3.4,则可以忽略 Apple 为您提供的 2.x 版本。来自 python.org 或 Homebrew 等其他主要来源的至少 Python 3.2+ 的所有版本都将遵循 PEP 394,这意味着您将获得不与 @ 冲突的 python3pip3 等命令苹果安装的987654329@等命令。

    另外,您在问题中提到了使用虚拟环境。这是一个好主意。无论您使用stdlib 的venv 还是第三方的virtualenv,您都可以创建单独的Python 3.4 环境。当你在一个活跃的虚拟环境中时,它的pip 将安装到它的站点包而不是全局包中。如果你真的搞砸了一个环境,你可以很容易地清理它,只需停用并执行rm -rf path/to/environment 并重新创建它。

    附带说明,您几乎从不想使用easy_install。如果你安装 Python 3.4,它会附带pip,所以为它安装包的正确方法是:

    [sudo] pip3 install xxx
    

    即使您拥有setup.py,除非它与pip 不兼容(现在大多数都兼容,但少数不兼容),您可能希望使用它而不是手动运行setup.py,例如这个:

    [sudo] pip3 install .
    

    另外,python.org 安装程序可以选择使站点包目录组可写。如果你启用了它,你应该使用sudo,因为那样你最终会得到一个混合了可写和不可写的站点包,卸载或升级将变成一个噩梦。 (使用此选项的一个很好的优点是从不使用sudo 意味着您永远不会意外地为 Apple 的 Python 2.7 安装任何东西,因为如果您尝试,您会收到权限错误。但缺点很明显。这就是为什么它是一个选项.)


    那么,你如何从这里到达那里?

    • 您可能希望pip list &gt; requirementspip freeze &gt; requirements 获取您已安装的所有软件包的列表。 (前者更易于阅读,后者可以直接与 pip install -r requirements 一起使用,以便在您清理后自动重新安装同一组软件包。)如果您已经使用 2.7 和 3.4,您可能希望这样做pip 为两者都安装了,让事情变得很混乱。
    • 卸载 Python 3.4。
    • 卸载您为 Apple 的 Python 2.7 安装的所有站点包。 (您已经知道它们在哪里,因此,即使您没有使用 pip 安装它们,您也可以手动卸载它们。请注意,它们可能会留下诸如 ipython 之类的脚本或 /usr/local/bin 中的类似脚本。 )
    • 从 python.org 安装最新的 Python 3.4。
    • [sudo] pip3 install 全球所有你想要的包。 (这可能什么都不是,或者只是virtualenv。)
    • 使用venvvirtualenv 为您要分开的每个项目创建一个虚拟环境,并使用其pip 而不是全局环境来为该特定环境安装软件包。

    【讨论】:

    • 谢谢,很好的回复!这消除了很多困惑。删除 /usr/local/bin 中的脚本是否安全,如果重要,我是否必须在重新安装之前这样做,还是它们只是残留?
    • @Winterflags:如果您知道它们是哪些,删除它们是安全的,但要知道它们是哪些并不总是那么容易。除非您没有安装任何其他进入 /usr/local/bin 的内容,否则最好的做法是首先 ls -l 并查找指向 /Library/Python 的符号链接,然后查看每个文件的内容以查找以#!/System/Frameworks/Python.framework/….
    • @abarnert。感谢您的帖子;它也帮助了我。与您发布的内容有关的两个问题:a) 您建议,如果我们使目录组可写(即可由wheel 以外的组写入),我们应该"not use sudo, because then you'll end up with a site-packages that's a mix of writable and non-writable." 为什么这是真的?如果我给了一个组写访问权限,那么组中的某个人使用sudo 会不会是多余的,因为他们已经可以访问所有内容了?什么会导致危险?
    • b) 你为什么建议我们删除旧版本 python 的站点包?为什么不干脆不理他们?
    • @Muno a) 除了我已经在答案中用括号给出的答案:如果 sudo 创建了 root:root 拥有的子目录, muno:wheel 将无法覆盖它。 b) 为避免混淆——如果您不小心运行了 Apple 的 Python,并且可以成功导入一些您期望的东西,那么您不小心运行了 Apple 的 Python 就不会那么明显了。
    【解决方案3】:

    不要删除 os x 附带的 python,因为有几件事取决于该安装。

    清理完您的 python 3 安装后,您应该使用虚拟环境,因为它们可以为您节省很多痛苦。然后您可以指定要使用哪个 python 版本(您可以安装您想要的每个版本)并且您安装的每个包都只是针对这个特定环境安装的,并且您系统的全局 python 保持不变。

    要开始设置您的虚拟环境,我建议您阅读 pyenv 和 pyenv-virtualenv

    https://github.com/yyuu/pyenv https://github.com/yyuu/pyenv-virtualenv

    【讨论】:

      【解决方案4】:

      您可以清理现有的 Python 内容并试用 Conda

      【讨论】:

        猜你喜欢
        • 2012-05-13
        • 2015-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-17
        相关资源
        最近更新 更多