【问题标题】:pip with fake computer architecture (64 bit instead 32 bit)具有假计算机架构的 pip(64 位而不是 32 位)
【发布时间】:2014-01-07 05:02:33
【问题描述】:

我在只有 FTP 访问权限的服务器上托管 Django 网站。服务器是64位架构,我的电脑是32位架构。对于某些模块,例如 MySQL-python,架构很重要。

有没有办法在我的个人计算机上从我的requirements.txt 构建一个适合服务器的站点包目录?我认为有必要以某种方式伪造 pip 的架构。

而且……是的。我可以使用一些 64 位机器。但要获得良好的工作流程,最好将所有内容都放在我的个人计算机上。

【问题讨论】:

  • 您的计算机是否具有 32 位架构,或者在其上运行的操作系统是否具有 32 位架构?
  • lspcu sais CPU op-mode(s): 32-bit, 64-bit,所以只有我的 linux 是 32 位的,而不是处理器。

标签: python pip django-deployment


【解决方案1】:

在虚拟机中进行本地开发

使用 virtualbox 和 make your guest OS be 64-bit

您仍然可以在本地编辑(通过共享文件夹),但部署到与架构匹配的虚拟机。这将为您节省很多痛苦。

这样做的最大原因是许多库必须针对架构进行编译。纯python不会有问题。

在远程主机上使用 virtualenv

此外,当您安装包和部署代码时,您应该使用virtual environment 而不是站点包。盒子上的任何管理员都可以通过系统更新来消灭您光荣的站点包。我们不想这样!

【讨论】:

    【解决方案2】:

    你的要求比你想象的要难得多。

    许多库(包括 MySQLdb)包含必须为目标系统编译的 C 扩展代码。如果您编译它们以在您的系统上运行,它们将无法在目标系统上运行。这意味着您需要一个交叉编译器。

    它们还需要链接到目标系统上存在的 Python 库,而不是您系统上的那些。而且他们几乎总是需要这些库附带的头文件和配置文件。

    大多数此类库都有其他依赖项——在这种情况下,您几乎肯定需要来自目标系统的 libmysql,而不是您系统上的那个,当然还有与之相关的头文件和配置文件。

    而且,如果您想使用 pip,您将需要一个 distutils/setuptools 配置来选择正确的工具链、库等进行构建。

    如果你做了所有这些,那么你可以为另一个系统的 Python 构建一个站点包。

    如果你用 Google 搜索“交叉编译 python 模块”,你会发现像 this one 这样的博客,如果你以前从未做过这样的事情,它们会给你一些指导。当然,就像博客文章描述不容易的事情一样,它们很快就会过时(我看到的前三个都是从安装distribute 替换setuptools 开始的,你绝对不会不想再做),所以你必须真正了解他们在做什么,并且能够自己调试过程,而不是盲目地跟随他们。


    如果你不想或不能自己做,那么你就不能做你想做的事。但无论如何,有一个更简单的解决方案。

    只需为服务器设置一个开发系统。如果您在 64 位硬件上运行,则可以双引导,或使用虚拟化工具(如 virtualbox 或 VMware)在 32 位 Linux 之上运行 64 位 Linux。在目标服务器上安装相同的发行版和相同的软件包,以及随附的 -dev/-devel/whatever 软件包,并在那里构建。

    如果您的硬件实际上是 32 位的,或者您的目标是 OS X 而不是 Linux,或者目标环境占用了太多磁盘空间只是为了设置它不适合您的笔记本电脑,那么这显然不会那么容易。但这些都不是真的,所以就这么简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-16
      • 2022-01-18
      • 1970-01-01
      • 2019-01-03
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多