2013-12-18 127 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而不是站點包。包裝盒上的任何管理員都可以通過系統更新將您光榮的網站包丟棄。我們不希望這樣!

相關問題