我正在尋找一種方法來在相同的程序中結合python 3.x和python 2.x模塊。運行使用python 3和python 2.7模塊的Python程序?
目前,我們想使用YAPSI加載它們,但我猜這是一個失敗的原因。
**顯然,它依賴於lib的模塊目前還沒有轉換爲python 3,並且需要很長時間才能完成。
我正在尋找一種方法來在相同的程序中結合python 3.x和python 2.x模塊。運行使用python 3和python 2.7模塊的Python程序?
目前,我們想使用YAPSI加載它們,但我猜這是一個失敗的原因。
**顯然,它依賴於lib的模塊目前還沒有轉換爲python 3,並且需要很長時間才能完成。
你可以但它是很多的工作。這些問題大多是打印語句中的語法錯誤。 簡單的打印將適用於任何版本。
print(" Supports all versions of Python!")
但是,如果你使用打印任何更高級的功能,這是不可避免的,你要麼結束了一個語法錯誤或不打印你的原意。 Python 2中的尾隨逗號有在Python 3成爲一個參數,因此,如果您使用尾隨逗號,以避免打印後換行,這將在Python 3的樣子
print('Text to print', end=' ')
這是Python的2
下一個語法錯誤在Python 2.6中有一個
__future__ import
進行打印到一個函數。所以爲了避免任何語法錯誤和其他差異,你應該在你使用print()的地方啓動任何文件,從 future import print_function。 未來導入只適用於Python 2.6及更高版本,因此對於Python 2.5及更早版本,您有兩種選擇。您可以將更復雜的打印轉換爲更簡單的打印,也可以使用可在Python 2和Python 3下使用的單獨打印功能。 要解決打印問題,您可以編寫自己的打印功能,這樣可以更輕鬆。
2)導入錯誤。 他們失敗的原因是標準庫讓周圍的重組是很容易像
try:
import configparser
except ImportError:
import ConfigParser as configparser
這將僅適用於重命名的進口工作,對於新模塊或誰是兼併或幾個老的模塊子模塊,你必須將它們轉換2to3這很容易。
3)整數不兼容。
在Python 3中,第一個是int和long類型已合併,這意味着您不能通過添加L後綴來指定整數應該很長。 1L是在Python 3 一個語法錯誤,你能避免像
import sys
if sys.version_info > (3,):
long = int
long(1)
1L
另一個變化是,八進制文字語法也發生了變化。至 。避免你可以使用十進制或十六進制值,並將八進制值放在註釋中,如
f = 420 # 644 in octal, 'rw-r--r--'
4)處理二進制數據。 其中最棘手和最複雜的都是。你可以閱讀它的文檔here。
from @Frrank answer;我強烈建議你自己將模塊源代碼轉換爲python 3x!或許多工具,你可以通過在谷歌搜索找到...
但一般來說,我認爲有此問題沒有Python的方式。但是你可以;用棘手的方式! (有三個棘手的方式):
第一:
同時下載蟒蛇2倍和3倍便攜口譯
複製並粘貼到同一個文件夾
與原來的 口譯分開來寫程序的每個部分(寫程序的功能或對象orinted)
做一個主程序與python3x和調用這些兩個部分 子,高管或其他方法
現在可以將這個文件夾編譯成一個EXE文件或進行設置( 包exe文件)並完成!
二:
如果你是cython友善,你可以將每個部分轉換您 程序,C/C++,那麼你可以合併或re_convert他們到Python 碼!
三:
如果你是jython友善,你可以將每個部分將您 程序到Java(jar文件),那麼你可以合併或re_convert他們到Python 碼!
好運...
Python 2和3沒有一個進程內進行合作。你可以使用remote procedure calls不過,可能使用Pyro (Python remote objects)。這與多處理中的管道具有類似的性能問題。 SharedArray可以使用共享內存更快地操作,但僅限於數值數組。
你爲什麼要那麼做。任何特定用例? –
主要是由於依賴於大量的第三方庫其中一些是巨蟒-3和其他人蟒2.這就是爲什麼它的問題簡單地轉換使用2to3的工具或其他模塊。 – YafimK