4

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

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

是的。我可以使用一些 64 位机器。但是为了一个好的工作流程,最好把所有东西都放在我的个人电脑上。

4

2 回答 2

5

在 VM 中进行本地开发

使用 virtualbox并使您的来宾操作系统为 64 位

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

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

在远程主机上使用 virtualenv

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

于 2013-12-18T20:47:37.433 回答
4

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

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

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

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

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

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

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


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

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

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

于 2013-12-18T21:04:30.970 回答