在没有 gcc 或 root 访问权限的共享主机上安装需要 gcc 的 python 模块

Posted

技术标签:

【中文标题】在没有 gcc 或 root 访问权限的共享主机上安装需要 gcc 的 python 模块【英文标题】:installing python modules that require gcc on shared hosting with no gcc or root access 【发布时间】:2014-11-29 19:43:47 【问题描述】:

我正在使用 Hostgator 共享作为生产环境,但在使用后安装一些 python 模块时出现问题:

pip 安装 mysql-python

pip 安装枕头

结果:

无法执行 gcc:权限被拒绝 错误:命令“gcc”失败,退出状态为 1

服务器限制

没有root权限 sudo不起作用(sudo:有效uid不为0,sudo是否安装了setuid root?) 没有 gcc

问题

    是否有替代枕头包装。我希望它使用 django ImageField。 (就像 pymysql 是 mysql-python 的替代品一样)

    我在 root 中安装了 mysql-python 和 pil 等模块,即没有任何 virtualenv 的 pip freeze 会列出这些模块。但我无法在这个根环境中安装我的其他必需模块,在我的 virtualenv 中我无法安装 mysql-python 和 pil。可以做些什么吗?我们可以在 virtualenv 中以某种方式导入/使用安装在 root 中的包吗?

    hostgator 共享只对 php 有好处,对 python/django webapps 没有好处。我们的流量有限,所以我们使用 hostgator shared。我们应该避免使用 hostgator 还是共享主机?它们对 python/django 来说还不够好(我在托管静态/PHP 站点方面没有问题)。它们是太多的问题和限制还是性能问题(FCGI)?如果是,有哪些替代方案?

【问题讨论】:

如果您的流量有限且网站较小,您可能需要考虑Heroku's free plan。 大约。 heroku free 每月可以提供多少浏览量?是 fcgi 还是 wsgi? 在此处检查此过程:community.webfaction.com/questions/7340/…,或者您可以尝试将已编译的枕头/鸡蛋文件夹从 ~usr/lib/python2.7/site-packages 复制/粘贴到 ~virtualenv/lib/ python2.7/site-packages 【参考方案1】:

您需要 root 权限才能安装必要的包来运行您的 python 应用程序。

像 Heroku 这样的 PAAS 是另一种选择,但 Heroku 的免费软件包仅适用于开发您的应用程序,它不适用于在您获得流量和用户后托管它。

我强烈建议您在 DigitalOcean.com 上获得 VPS。每月 5 美元,您将获得 root 访问权限和更多功能。您还将控制您的全部筹码。我现在使用 nginx+Gunicorn 在 DigitalOcean 上托管了大约 10 个 Django 项目。

【讨论】:

例如,仅 Ubuntu 就需要大约 2GB 的 RAM。 Digital Ocean 定价为每个“液滴”5 美元,其中液滴仅包含 0.5GB。他们根本不鼓励使用任何交换,因为这会磨损他们的 SSD。是吗? 不,我已经在 512M 的 RAM 小滴上运行了完整的 Django 应用程序和活动用户。但是随着应用程序变得越来越大,您将需要更多的内存 谢谢威廉...我试试看。【参考方案2】:

    您可以尝试使用 PIL 代替 Pillow(尝试一下,但我猜您可能会遇到相同的编译问题)

    当你设置你的 virtualenv 时,你可以给它传递一个 --system-site-packages 标志。见here

    肯定有很多可供选择的服务——heroku、数字海洋、webfaction 等。PythonAnywhere 的快速插件(我在这里工作)——我们是专门针对 Django 等 python 框架的 PAAS预装了 PIL、mysql-python 和许多其他 python 包。

【讨论】:

【参考方案3】:

您可以尝试在 gcc 可用的类似主机上构建wheels,将它们复制到您的服务器并安装。但是我不知道应该有多少相似的主机。

    使用 gcc 在“类似”主机上:

    mkdir /tmp/wheels mkdir /tmp/pip-cache pip wheel --download-cache /tmp/pip-cache -w /tmp/wheels -r requirements.pip

    复制***到你的主机(我假设你复制到/tmp/wheels

    从***安装忽略索引并使用***目录:

    pip install --download-cache /tmp/pip-cache --find-links=/tmp/wheels --no-index -r requirements-dev.pip

附:也许您还应该将下载缓存复制到您的主机。我不记得这是否需要。如果不需要,则可以跳过选项--download-cache /tmp/pip-cache

【讨论】:

以上是关于在没有 gcc 或 root 访问权限的共享主机上安装需要 gcc 的 python 模块的主要内容,如果未能解决你的问题,请参考以下文章

解决virtualbox共享文件夹没有访问权限的问题

解决virtualbox安装linux 共享文件夹没有访问权限的问题

vbox安装ubuntu之后挂载共享文件夹无权限访问的问题以及改了主机名,导致命令行不能解析主机名的问题

如何在共享主机上运行 SASS 或 LESS?

在没有 root 访问权限的系统上构建 Docker 映像

为没有 root 权限的 nvcc 指定 GCC 版本