2013-07-23 40 views
1

我有一個Python程序,它將動態添加到sys.path。它工作正常,但我想分發我的Python程序作爲運行__main__.py的.zip文件。動態添加引用到.zip文件中的Python sys.path條目

我可以從zip文件中添加條目到sys.path嗎?在搜索了一下後,我發現了pkgutil documentation,但我無法弄清楚什麼會起作用。

注:的東西,我需要添加sys.path包括.pyd.dll文件爲Windows。

+0

你不能執行zip文件...我不明白我認爲的問題 –

+0

我以爲你不知道你在說什麼,直到我看到你的聲望。 –

+0

你*可以*執行一個zip文件:http://bugs.python.org/issue1739468 –

回答

2

我不能完全肯定我理解你的問題,但我會在回答反正它有裂紋......

不幸的是,當你從一個zip文件將其添加到sys.path導入:

sys.path包含提供 模塊和包的搜索位置的字符串列表。它是從PYTHONPATH 環境變量以及各種其他安裝和 實現特定的默認值初始化的。 條目在sys.path可以命名文件系統上 目錄,zip文件,和潛在的其他 「位置」(見site模塊)應搜索模塊, 如URL或數據庫查詢。 sys.path上只有字符串和字節應該是 ;所有其他數據類型都被忽略。 字節條目的編碼由各個path entry finders確定。

來源:http://docs.python.org/3/reference/import.html#path-entry-finders

...這沒有延伸到.pyd.dll文件:

任何文件可能存在於ZIP壓縮文件,但文件只.py.py[co]可供導入。 動態模塊的ZIP導入(.pyd, .so)是不允許的。

來源:http://docs.python.org/3/library/zipimport.html

我不知道這種限制工作的任何方式。

+0

有沒有很好的解決方法?例如如果我將.pyd和.dll文件解壓到某處並將它們添加到sys.path中,那麼在哪裏可以做到這一點?我不想修改默認的Python安裝,如果我運行.zip文件100次,我不希望它生成100個臨時目錄。 –

+1

@JasonS我從來沒有開發專門爲Windows(也不是我的Windows用戶),但它看起來像[winpaths](http://ginstrom.com/code/winpaths。html)可能會有幫助 - 大概你會想要一個「應用程序數據」變種。順便找到[這裏](http://stackoverflow.com/q/626796/1014938)。 –

相關問題