【问题标题】:have local numpy override global让本地 numpy 覆盖全局
【发布时间】:2012-02-27 23:17:12
【问题描述】:

我正在使用没有管理权限的服务器,我需要使用最新版本的 numpy。系统管理员坚持不能将全局numpy更新到最新版本,只好本地安装。

我可以毫无困难地做到这一点,但我如何确保“import numpy”会导入较新的本地安装,而不是较旧的全局版本?我可以调整我的 PYTHONPATH,但我也想使用一些全局导入,所以我不能排除所有全局包。

顺便说一下,我使用的是 CentOS 6。

谢谢!

【问题讨论】:

    标签: python numpy centos


    【解决方案1】:

    最好的解决方案是安装和使用virtualenv,它的存在正是出于这个原因。

    【讨论】:

    • 谢谢,这是一个很好的解决方案!不过我不需要这么详细的东西,而且kindall的回答要容易得多。
    【解决方案2】:

    Python 会按顺序搜索路径 所以只需将安装 NumPy 的目录放在路径的首位即可。

    您可以查看numpy.version.version 以确保您获得了所需的版本。

    【讨论】:

      【解决方案3】:

      作为使用 virtualenv 的替代方法,您可以使用 PYTHONPATH 或修改 sys.path

      PYTHONPATH 可以放在你的~/.bash_profile 中(或者任何适合你使用的 shell 的启动文件)。或者,在系统的python 之前的PATH 中的python 包装脚本中,例如:

      $ cat ~/bin/python # assuming ~/bin is in PATH before /usr/bin
      #!/bin/bash
      PYTHONPATH=<path-to-your-libs> /usr/bin/python
      

      或者,一个人可能希望明确并命令 Python 仅在被要求时才使用自定义库。这种情况下sys.path变量可以直接修改,比如:

      import sys, os
      sys.path.insert(0, os.path.expanduser("~/my_python_libs"))
      import numpy # searches for numpy first in "~/my_python_libs"
      

      将上述修改python模块搜索路径的代码放入可重用模块并导入该模块可能会很方便,这样在更改路径时只需要修改此模块。

      有关更多信息,请参阅6.1.2. The Module Search Path

      就个人而言,我从源代码编译最新的 Python 以及我使用的所有第 3 方库。这使得切换到最新的库变得容易,并且不依赖于您的 Linux 发行版(Linux 发行版,尤其是企业发行版,不可能跟上 Python 库的更新)。

      【讨论】:

        【解决方案4】:

        最简单的方法是在构建和安装 numpy 时使用 --user 选项

        $ python setup.py install --user
        

        $ pip install --user numpy
        

        这不需要管理权限,也无需篡改您的sys.path

        virtualenv 也非常有用,但不是必需的,除非您想为不同的应用程序使用不同版本的 numpy。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-09-27
          • 1970-01-01
          • 2013-05-27
          • 2019-07-14
          • 1970-01-01
          • 2011-02-25
          • 2020-07-28
          相关资源
          最近更新 更多