2013-12-18 89 views
4

我在一台服务器上托管Django网站,我只有FTP访问权限。服务器具有64位体系结构,我的计算机具有32位体系结构。对于一些模块,如MySQL-python,体系结构很重要。假计算机体系结构点(32位而不是64位)

有没有一种方法可以在我的个人电脑上建立一个从我的requirements.txt的site-packages目录,该目录适用于服务器?我认为有必要以某种方式伪造pip架构。

And ...是的。我可以访问一些64位机器。但对于一个好的工作流程,最好是在我的个人电脑上放置一切。

+0

您的计算机是否具有32位体系结构,或者其上运行的操作系统是否具有32位体系结构? –

+0

'lspcu'sais'CPU操作模式:32位,64位',所以只有我的linux是32位的,而不是处理器。 –

回答

4

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

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

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

大多数这样的库都有其他依赖关系 - 在这种情况下,几乎可以肯定需要来自目标系统的libmysql,而不是系统上的libmysql,当然还有头文件和配置文件。

而且,如果你想使用pip,你需要一个distutils/setuptools配置来选择合适的工具链,库等。

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

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


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

只需要为服务器建立一个开发系统。如果您在64位硬件上运行,则可以双启动,或使用虚拟化工具(如virtualbox或VMware)在32位系统上运行64位Linux。安装目标服务器上相同的发行版和相同软件包,以及随附的任何软件包,并在那里构建。

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

5

不要在VM

使用VirtualBox和make your guest OS be 64-bit地方发展。

您仍然可以在本地进行编辑(通过共享文件夹),但部署到与该体系结构相匹配的虚拟机。这会为你节省很多痛苦。

这样做的最大原因是许多库必须为架构编译。纯python不会是一个问题。远程主机

使用的virtualenv此外,当您安装的软件包和部署你的代码,你应该使用virtual environment而不是站点包。包装盒上的任何管理员都可以通过系统更新将您光荣的网站包丢弃。我们不希望这样!

相关问题