在共享主机virtualenv上安装Python模块

时间:2014-05-21 21:44:01

标签: python numpy

尝试在我的共享主机帐户的virtualenv中使用python。基于this dreamhost tutorial安装了pip和另外一个或两个模块(echonest,remix),但尝试安装numpy长的错误列表以non-existing path in 'numpy/distutils': 'site.cfg' /bin/sh: svnversion: command not found开头。

我读过的virtualenv说明,“确保你的路径优先选择〜/ local / bin到/ usr / bin,这样你的Python的”本地“副本就会运行,而你的脚本会引用那个位置。“

这是否建议在指向/usr/bin/~/local/bin的来电的地方建立链接?

解决方案是找到安装包并在其setup.py文件中编辑路径吗?

3 个答案:

答案 0 :(得分:1)

这是指linux环境变量$PATH,它列出了在未指定绝对路径时查找命令可执行文件的目录。这将包含逗号分隔路径列表,例如:

/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

您只需要确保/usr/local...内容首先(左)首先出现(左):

export PATH=/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin

答案 1 :(得分:1)

运行setup.py时,您确定自己正在运行~/local/bin/python吗?

您可以执行的一项特定于virtualenv的事情是source ~/local/bin/activate,它会自动将您的virtualenv设置为优先于您路径中的其他所有内容。只有在您退出终端实例或运行deactivate

之后,它才有效

答案 2 :(得分:1)

我在评论中看到了混乱 - 在本地"之间和#34;你的演奏家"。 $ PATH存在一个并行问题。只有一个路径问题吗?不......有两个

是的,我在不同的共享主机帐户上的类似努力最终也会崩溃,但我还有更长的路要走,而且我似乎已经找到了一些东西。这里的混淆部分是因为在问题中有两个Dreamhost教程,但这两个wiki章节的作者并没有做任何努力来整合这两个。

second tutorial on Python中,错误是在virtualenv部分引入本地目录的讨论,虽然它只在下一节中有关构建自己的Python的真正解释。关于如何处理$ PATH,关于建立自己的讨论并不完整。您不需要构建自己的Python或只需使用virtualenv本地目录。

甚至可能是有害的。 this official virtualenv page处的语言应该让您感到绝望,因为它没有表现出明确的努力。我认为这意味着mod_python和mod_wsgi,你必须使用它们进行Flask实验,不要使用你可能想到的任何Python--他们使用自己的Python解释器,系统&#39 ; s版本。但是virtualenv,这个程序,也会在你的虚拟环境中放置一个Python解释器(你将用来安装的解释器,如果你允许的话,最终也会运行解决方案)。 virtualenv人员的警告要点是你不能在同一服务器进程中使用两个不同的解释器。他们向您展示了解决方法。

但我已经离题了。第二个Python教程指导在/ home / yourusername / local目录中构建自己的本地Python。在Sugath Mudali's Blog可以找到更完整,更简洁的讨论。

你的virtualenv应该占用第二个目录,我称之为你的virtenv。和〜/本地一起应该没问题。

因此,根据Sugath Mudali的有用说明,您需要执行export PATH = / home / yourusername / local / bin:$ PATH,它将/ home / yourusername / local / bin放在$前面路径,您可以使用" echo $ PATH"确认。一旦你完成了这个,每当你使用" python"在你的shell中,你将使用你刚刚安装的Python,你刚才放的路径。

完成后,如果你然后进入你的virtualenv源文件夹(在/ home / youruserhame中的某个地方)并运行" python virtualenv.py / home / youruserhame / yourvirtenv"它将创建一个目录〜/ yourvirtenv,它将放置本地Python解释器的副本。通常它不仅是一个独特的副本,但它的版本与你的系统的版本不同,在/ usr / bin / as / usr / bin / python(" usr"这里不是你是一个奇怪命名的整个共享Linux机器的目录,没有非特权用户可以访问,可以通过特权来安装程序二进制文件,以供系统范围内使用。

请注意,Dreamhost Python wiki表示,截至2012年2月,DreamHost已开始将服务器升级到Python 2.6.6。"版本2.6适用于virtualenv以及几乎所有其他内容。所以我会质疑在你的情况下构建自己的Python的必要性。 (请注意,Dreamhost甚至建议您尝试完全忘记它。)

无论如何,正如limasxgoesto0所指出的,第二次PATH协议,一旦你运行virtualenv.py并创建了myvirtenv,如果你仍然在/ home / myusername用户根目录中运行source myvirtenv /斌/来源。这将/ home / myusername / myvirtenv / bin放在路径的前面 - 直到你以后简单地运行"停用" (前面没有来源)。那就是激活的所有

现在,当您几天后返回并重新开始工作时请考虑以下事项:export PATH = / home / yourusername / local / bin:$ PATH已经蒸发。它不是永久性的;壳关闭时消失。要使其永久化,您必须将该语句添加到.bash_profile。这是我的:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi
PATH=$PATH:$HOME/bin
export PATH
export PATH=$HOME/local/bin:$PATH
export LD_LIBRARY_PATH=/home/myusername/local/lib
unset USERNAME

我发现有必要重新设置LD_LIBRARY_PATH以生成sqlite3函数,即使我已经编译了sqlite3并在构建Python之前完成了导出。

请注意,此.bash_profile会调用.bashrc。根据Dreamhost的排列方式,您可能必须将这些导出放在.bashrc中。

同样,当你返回shell时,即使你没有输入"停用",也不会发现myvirtenv仍然被激活。您只能在shell中临时激活它以在其中安装内容并启动服务器或运行您已安装的其他程序。此后,已安装的东西知道使用已复制到myvirtenv的Python解释器。为了避免这种情况发生,为了使系统Python解释器运行起来,你必须在mod_python上执行前面提到的官方virtualenv文档,mod_wsgi说。

即使您没有构建自己的Python,看起来似乎也是必要的,因为否则您将在同一服务器进程中运行两个Python解释器。不过我对此很粗略。与Django一样,Flask是一个Python框架。 A2托管教程---他们也使用Phusion Passerger ---可能会引起关注。在他们的网站上搜索" Django共享"并且教程将会出现在最前面。请注意,Chris C。的说明告诉您使用--python = / path / to / python开关。在你的情况下,如果你有本地安装的Python,可以是/ home / myusername / local / bin / python,但在他们的情况下,它是/usr/bin/python2.6。我认为他们的观点是,他们不希望从客户处获得因升级到他们的系统python2.6而导致问题的技术支持票可能会破坏您的网站。所以--python开关(-p目录是简短格式; - python =目录是长格式)是冻结你的应用程序将使用的Python,以避免此类问题。它通过将所有Python复制到您的虚拟环境中而不仅仅是解释器来实现。

我不明白他们是如何使用两种不同的口译员来避免mod_wsgi和客户应用程序的问题,但也许这就是Phusion Passenger可以帮助解决的问题。