2011-11-15 58 views
7

我在寫一個Django的web應用程序。截至目前,Django does not support Python 3。爲了我的Web應用程序的目的,並且沒有深入細節,我基本上需要使用一些僅支持Python 3的庫。完全可以這麼說,經過非常徹底的研究,沒有發現2.x替代方案。從Python 2.x中調用Python 3.x程序的最佳方法是什麼?

所以我的問題是這樣的:我應該怎麼做呢?

我的服務器上安裝了Python 2和Python 3,並且我已經編寫了Python 3代碼並等待被調用。我正在考慮簡單地使用subprocess模塊,從命令行有效地調用Python 3,但問題是,這是最好的方法,還是有最佳做法,我可以在這裏使用?使用subprocess對我來說似乎非常討厭。不要誤解我的意思,我可以用黑客行事,我只是想確保沒有別的事情可以做。

+0

如何使用[cherrypy](http://cherrypy.org/)並在Python 3中完成整個事情? –

+0

xmlrpc可能是子處理的簡單替代 – gecco

+1

您是否嘗試過使用3to2程序來查看未指定的Python 3-only庫是否可以自動轉換爲Python 2?你有沒有嘗試過使用Martin vonLöwis'[Django的端口到Python 3](https://bitbucket.org/loewis/django-3k/),所以一切都運行在Python 3中? –

回答

6

由於Python 3中和Python 2解釋是完全獨立的可執行文件,並在系統中安裝上獨立的庫,使用subprocess調用從另一個的最佳實踐。這根本不是黑客。有很多方法可以在它們之間傳遞數據,但兩個解釋器應該作爲單獨的進程運行。

也就是說,您可能需要記住與啓動解釋程序相關的啓動時間。這回到如何在兩個進程之間傳遞數據。如果您的Python 2代碼將頻繁調用Python 3例程,則可能需要將Python 3程序構造爲守護程序。但是你仍然會使用subprocess來啓動它。

+0

太棒了。非常感謝。至於它是否需要最終成爲一個流程......這需要考慮一下。它只需要在用戶註冊時調用一次,所以它可能不需要在短期內,但理論上,如果我的webapp變得有用,它可能是一個方便的事情。即使互聯網連接速度很慢,整個過程也不會超過5秒鐘。 –

1

將3.x程序作爲單獨的服務運行,然後使用某種RPC機制進行連接?

相關問題