2013-06-11 61 views
1

我有一個在Python 2和Python 3下編寫的Python庫,所有特定於版本的代碼都位於一個存在兩種變體的模塊中,一個Python 2的源代碼文件和Python 3的源代碼文件。每個文件都包含導入到錯誤的Python版本中時引發SyntaxError的代碼。使用特定於版本的(2/3)代碼打包python庫

當我用distutils打包我的庫並安裝它時,我總是得到一個或另一個文件的語法錯誤報告。有沒有辦法擺脫這個?理想情況下,我想告訴distutils/setuptools忽略不適用於當前運行的Python版本的文件。

+0

爲什麼不合並這兩個文件?編寫運行於其中的代碼是完全可行的。 –

+0

這就是我爲大多數模塊所做的,但是當我需要某個版本中的某個語法錯誤時,我需要將這些文件分開。例如,我需要在Python 3中執行「del exec」,這是Python 2中的一個語法錯誤,其中exec是關鍵字。 – khinsen

+0

爲什麼你需要使用'exec' *? –

回答

0

distutils在構建時和/或安裝時導入所有模塊以字節編譯它們(即創建pyc和pyo文件)。目前沒有選項可以跳過模塊。您可以編寫安裝腳本,以便爲Python 2和Python 3生成不同的sdist(例如,somemodule2.py不會包含在Python 3 sdist中),但並非所有工具都可以很好地與不同的sdist(包括PyPI)配合使用。

目前,我會嘗試使每個模塊在由Python 2或3導入時不會引發SyntaxError。或者,我會遵循Martijn的建議,只寫一個模塊,可能使用六個模塊,如果結束結果並不是太雜亂(我見過非常可怕的2和3代碼,所以我不喜歡這個解決方案,但是社區的很大一部分人選擇了它,因爲它的工作原理)。