2012-07-06 54 views
13

我已經開始研究Python中的商業應用程序,並且我正在權衡如何分發應用程序的選項。分發.pyc文件有什麼限制?

除了顯而易見的(分發來源與適當的商業許可證),我正考慮分發.pyc文件沒有其相應的.py來源。但是我對Python的兼容性保證不夠熟悉,不知道這是否是可行的,更不用說它是否是個好主意。

是否.pyc獨立於底層操作系統的文件?例如,在64位Linux機器上生成的.pyc文件是否可以在32位Windows機器上運行?

我發現.pyc文件should be compatible across bugfix releases,但主要和次要版本呢?例如,使用Python 3.1.5生成的文件是否與Python 3.2.x兼容?或者,Python 2.7.3生成的.pyc文件是否與Python 3.x版本兼容?

編輯:

首先,我可能要安撫利益相關者誰是不舒服的分配來源。分發.pyc沒有來源可能會給他們一些舒適程度,因爲它需要額外的反編譯步驟才能獲得來源,即使這一步有些微不足道。保持誠實的人的誠實就夠了。

回答

16

例如,使用Python 3.1.5生成的文件是否與Python 3.2.x兼容?

還是會使用Python 2.7.3生成.pyc文件文件與一個Python 3.X版本不兼容?

雙重否。

我正在考慮只發布.pyc文件而沒有它們相應的.py源文件。

Python的字節碼是高層和平凡反編譯。

+0

讓我很好奇,是有一個(推薦,或任何)的方式以某種方式混淆Python代碼和發佈呢? – Levon 2012-07-06 19:19:02

+6

@Levon:我不知道,我不會做那樣的傻事。 – 2012-07-06 19:19:28

+3

然而,我仍然upvoted你:-) – Levon 2012-07-06 19:21:12

4

你當然可以只分發.pyc文件。正如Cat提到的,不,它不會與不同的主要版本的Python兼容。它可能會阻止某些人查看源代碼,但.pyc文件非常易於反編譯。基本上如果你可以編譯它,你可以反編譯它。

你可以使用像py2exe/py2app/freeze這樣的二進制包裝器。我從來沒有嘗試過,但有人仍然可以反編譯它們,如果他們想。

1

正如Cat所說,pyc文件不是交叉版本安全的。儘管你試圖隱藏用戶的內容決定了你需要做什麼。

至於源代碼,在分佈式應用程序中沒有好的方法來隱藏Python源代碼。如果你只是想隱藏特定的細節,你可以將它們打包成一個C擴展 - 反編譯會更加困難。

因此,如果您擔心代碼使用,請將附加到代碼的許可證用於禁用或將您不想竊取的部分轉換爲編譯語言。如果你只想讓代碼不是明顯的Python,你可以創建一個封裝Python代碼的二進制可執行文件(儘管如果有人從文件中提取它們並不隱藏實際的細節)。