2017-03-08 93 views
3

我安裝了嵌入式python here,標題爲「Windows x86-64 embeddable zip file」,但它沒有安裝pip,它也沒有site-packages,當我嘗試做python get-pip.py它失敗運行,因爲這個文件有import pip在裏面。那麼如何在嵌入式Python環境中安裝pip。pip嵌入python

回溯(最近通話最後一個): 文件 「\ getpip.py」,行20061,在 主() 文件,線194,在主 引導( 「\ getpip.py。」 TMPDIR = TMPDIR) 文件 「\ getpip.py」,線82,在自舉 進口PIP 文件 「」,線961,在_find_and_load 文件 「」,線路950,在_find_and_load_unlocked 文件 「」,線646, in _load_unlocked 文件「」,行616,在_load_backward_compatible

目錄結構:

Directory: C:\Downloads\python-3.6.1rc1-embed-win32 

Mode    LastWriteTime   Length Name 
----    -------------   ------ ---- 
-a----   3/4/2017 7:26 PM   157344 pyexpat.pyd 
-a----   3/4/2017 7:26 PM   97952 python.exe 
-a----   3/4/2017 7:26 PM   58016 python3.dll 
-a----   3/4/2017 7:26 PM  3263648 python36.dll 
-a----   3/4/2017 7:26 PM  2209284 python36.zip 
-a----   3/4/2017 7:26 PM    79 python36._pth 
-a----   3/4/2017 7:26 PM   96416 pythonw.exe 
-a----   3/4/2017 7:26 PM   23200 select.pyd 
-a----   3/4/2017 7:26 PM   866464 sqlite3.dll 
-a----   3/4/2017 7:26 PM   895648 unicodedata.pyd 
-a----   3/4/2017 7:26 PM   83784 vcruntime140.dll 
-a----   3/4/2017 7:26 PM   24224 winsound.pyd 
-a----   3/4/2017 7:26 PM   45216 _asyncio.pyd 
-a----   3/4/2017 7:26 PM   77984 _bz2.pyd 
-a----   3/4/2017 7:26 PM   101536 _ctypes.pyd 
-a----   3/4/2017 7:26 PM   215712 _decimal.pyd 
-a----   3/4/2017 7:26 PM   156832 _elementtree.pyd 
-a----   3/4/2017 7:26 PM  1042592 _hashlib.pyd 
-a----   3/4/2017 7:26 PM   183456 _lzma.pyd 
-a----   3/4/2017 7:26 PM   32416 _msi.pyd 
-a----   3/4/2017 7:26 PM   25760 _multiprocessing.pyd 
-a----   3/4/2017 7:26 PM   33952 _overlapped.pyd 
-a----   3/4/2017 7:26 PM   61600 _socket.pyd 
-a----   3/4/2017 7:26 PM   64160 _sqlite3.pyd 
-a----   3/4/2017 7:26 PM  1458848 _ssl.pyd 
+0

更多信息得到點子是能夠安裝,即使沒有安裝PIP畫中畫。你確定你運行在嵌入式python的conext中嗎?你能顯示python可執行文件運行的「WHERE」嗎? – nir0s

+0

@ nir0s你的意思在哪裏?我從解壓zip文件的文件夾中運行它。 – fluter

+0

這就是我要問的。哪個文件夾?你能打印該文件夾的目錄內容嗎? – nir0s

回答

5

我最近遇到了同樣的問題。我檢查了pip的文檔,他們似乎說這個用例不支持等。但無論如何,這裏是我的黑客讓模塊工作。

我安裝了,我的意思是解壓縮嵌入式Python到一個名爲d:\ python的目錄中。我假設這些模塊將會在同一個目錄中生存。

首先,要安裝pip模塊,我需要保存被推斷的文件。我使用支持unix行終止符的文本編輯器更改了get-pip.py,方法是從get-pip.py文件中包含的blob中刪除rmtree行,以刪除臨時樹和解包樹。

我改變了兩個地點,但只有最後一個需要。我在兩個地方改了行讀

shutil.rmtree(tmpdir, ignore_errors=True) 

,我修改了它這樣(我不想與蟒蛇縮進塊打擾):

print('shutil.rmtree(tmpdir, ignore_errors=True)') 

現在我跑我的python d: \ python \ python.exe修改後的get-pip.py,並找到解壓到的文件的臨時目錄。我將這個目錄(檢查它是否包含一個主要.py)文件複製到Python安裝D:\ python \ pip(這是我希望我的模塊存在的地方),確保D:\ python \ pip目錄包含主要 .py文件。

pip模塊現在安裝在python目錄中,但您需要進一步破解pip以刪除上述異常。我通過更改locations.py文件(在我的案例中位於D:\ python \ pip \ locations.py)來執行此操作,以返回D:\ python的bin_py和bin_user位置。

即:

86 if WINDOWS: 
.... 
bin_py = 'd:/python' 
bin_user = 'd:/python' 

我不得不爲畫中畫user_dir的改變的地方,會保留此驅動器是在多個虛擬機共享上。

畫中畫模塊現在運行正常,如

d:\ python的\ python.exe -m PIP ...

+0

這項工作很好,謝謝,但是如果我安裝了3-d側包,它將它放到d:\ python \ Lib \ site-packages中,並且看不到 – savinson

+0

您可能想檢查站點路徑。 – jam3st

+0

我無法找到如何添加到路徑'D:\ python \ Lib \ site-packages'永久,否則它會讓我每次使用我的嵌入式Python時添加此路徑 – savinson

1

即使明確指出嵌入version of python do not supports pip,他們說這是小心謹慎。在嵌入版本的python中使用pip有一個簡單的解決方法。

您需要:

  • 編輯文件「python36._pth」找到解壓縮文件夾
  • 然後取消註釋如註釋上面提出的import site聲明。

    python36.zip 
    . 
    
    # Uncomment to run site.main() automatically 
    import site 
    

你可以找到有關此方面的pip issue 4207