嵌入python的pip

2024-04-28 20:40:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我从here安装了名为“Windowsx86-64可嵌入zip文件”的嵌入式python,但它没有安装pip,也没有站点包,当我尝试执行python get-pip.py时,它无法运行,因为该文件中有import pip。所以我如何在嵌入式python环境中安装pip。

Traceback (most recent call last): File ".\getpip.py", line 20061, in main() File ".\getpip.py", line 194, in main bootstrap(tmpdir=tmpdir) File ".\getpip.py", line 82, in bootstrap import pip File "", line 961, in _find_and_load File "", line 950, in _find_and_load_unlocked File "", line 646, in _load_unlocked File "", line 616, in _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

Tags: pip文件inpyimportmainlineload
3条回答

如何将pip安装到可嵌入的python发行版中:

  1. 在那里解压缩python可嵌入的发行版存档和cd
  2. 运行python ./get-pip.py(得到here
  3. 只需在pythonXX文件中取消注释字符串import site。或者 将新创建的文件夹Lib/site packages/中的文件夹(至少pip)复制到pythonXX.zip中

现在可以python -m pip ...

即使显式地声明了嵌入的version of python do not supports pip,他们也说小心是可能的。在python的嵌入版本中使用pip有一个简单的解决方法。

PIP可以安装在嵌入式python中。你需要:

  • 下载并解压缩python“…可嵌入的zip文件”。(来源:https://www.python.org/downloads/

  • 编辑文件'[python folder]\python36.\u pth'。取消对上面注释中建议的import site语句的注释。

    python36.zip
    .
    
    # Uncomment to run site.main() automatically
    import site
    
  • 将get-pip.py下载到python安装文件夹(源代码:https://pip.pypa.io/en/stable/installing/

  • 运行get pip脚本命令。这会将pip安装到[python]\Scripts目录中

    python get-pip.py
    
  • 从命令行直接运行pip,因为pip是一个可执行程序(本例是安装pandas)

    .\Scripts\pip --install --user pandas
    

您可以在pip issue 4207中找到有关此的更多信息

我最近碰到了同样的问题。我查看了pip的文档,他们似乎说这个用例是不受支持的等等,但是无论如何,这里是我让模块工作的技巧。

我安装了,我的意思是将嵌入式python解压到一个名为d:\ python的目录中。我假设模块将位于同一目录中。

首先,要安装pip模块,我需要保存附加的文件。我使用支持unix行结束符的文本编辑器更改了get-pip.py,方法是删除rmtree行,这些行从get-pip.py文件中包含的blob中删除临时和解包的树。

我改变了两个位置,但只需要最后一个。我在两个地方换了一行

shutil.rmtree(tmpdir, ignore_errors=True)

我就这样修改了它(我不想为python缩进块而烦恼):

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

现在,我在修改后的get-pip.py上运行python D:\ python\python.exe,找到文件解压缩到的临时目录。

我将这个目录(检查它是否包含main.py)文件复制到python install D:\ python\pip(这是我希望模块存在的地方),确保D:\ python\pip目录包含main.py文件。

pip模块现在安装在python目录中,但是需要进一步修改pip以删除上面的异常。为此,我更改了locations.py文件(在我的例子中位于D:\ python\pip\locations.py中)以返回D:\ python的bin-py和bin-u用户位置。

即:

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

我不得不将pip的user_dir更改为在这个驱动器上持久存在的、跨多个vm共享的某个位置。

pip模块现在运行良好

d:\python\python.exe -m pip ...

相关问题 更多 >