带有嵌入式 Python 的 pip

pip with embedded python

提问人:fluter 提问时间:3/8/2017 最后编辑:Cœurfluter 更新时间:11/18/2023 访问量:56716

问:

我从这里安装了嵌入式 python,标题为“Windows x86-64 可嵌入 zip 文件”,但它没有安装 pip,也没有站点包,当我尝试这样做时,它无法运行,因为这个文件有。那么,如何在嵌入式 python 环境中安装 pip。python get-pip.pyimport pip

回溯(最近一次调用最后一次): 文件“.\getpip.py”,第 20061 行,在 主要() 文件 “.\getpip.py”,第 194 行,在 main 中 引导程序(tmpdir=tmpdir) 文件“.\getpip.py”,第 82 行,在引导程序中 导入点 文件 “”,第 961 行,_find_and_load 文件 “”,第 950 行,_find_and_load_unlocked 文件 “”,第 646 行,_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
python 点数

评论

0赞 nir0s 3/9/2017
即使未安装 pip,get-pip 也可以安装 pip。你确定你是在嵌入式 python 的 conext 中运行吗?你能显示 python 可执行文件运行的“WHERE”吗?
0赞 fluter 3/9/2017
@nir0s你指的是哪里?我从使用 zip 文件解压缩的文件夹中运行它。
0赞 nir0s 3/9/2017
这就是我要问的。哪个文件夹?您可以打印该文件夹的目录内容吗?
0赞 fluter 3/9/2017
@nir0s 我已经用文件夹内容更新了帖子。
0赞 idbrii 7/31/2021
相关:将包添加到适用于 Windows 的 Python“嵌入式”安装

答:

12赞 user7287311 5/25/2017 #1

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

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

首先,要安装 pip 模块,我需要保存已提取的文件。我使用支持 unix 行终止符的文本编辑器更改了 get-pip.py,方法是删除从 get-pip.py 文件中包含的 blob 中删除临时和未打包树的 rmtree 行。

我更改了两个位置,但只需要最后一个位置。我在两个位置更改的行是

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_user位置来做到这一点。

结婚

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

我必须将 pip 的user_dir更改为在多个 VM 之间共享的此驱动器上保留的位置。

pip 模块现在运行良好,例如

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

评论

0赞 savinson 10/22/2017
这工作正常,谢谢,但是如果我安装 3-D 端包,它会将其放入 d:\python\Lib\site-packages 中,但看不到
0赞 10/25/2017
您可能需要检查站点路径。
0赞 savinson 10/31/2017
我找不到如何永久添加到路径“d:\python\Lib\site-packages”中,否则每次使用嵌入式 python 时都会让我添加此路径
1赞 Meow 3/21/2018
Yon 不需要对位置进行硬编码,而是使用 and。bin_py = os.path.dirname(sys.executable)bin_user = os.path.dirname(sys.executable)
86赞 oyon 2/21/2018 #2

即使明确指出 Python 的可嵌入版本没有 支持Pip,小心是可能的。您需要:

  1. 下载并解压缩 Python 可嵌入的 zip 文件。

  2. 在文件或类似文件中,取消对命令的注释。 结果应如下所示:python39._pthimport

    python39.zip
    .
    import site
    
  3. 将 get-pip.py 下载到 Python 安装文件夹

  4. 跑。这会将 Pip 安装到目录中:get-pip.pyScripts

    python get-pip.py
    
  5. 直接从命令行运行 Pip,因为 Pip 是一个可执行程序(这个 例如安装 Pandas):

    .\Scripts\pip install pandas
    

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

评论

3赞 Yılmaz Durmaz 10/10/2018
pip 安装正常,但无法正常运行或根本无法运行。“_pth”文件需要触摸:在“”下面添加“.\Lib\site-packages\”。
4赞 Yılmaz Durmaz 10/10/2018
我刚刚发现删除/重命名“_pth”文件可以将此安装从嵌入式中解放出来。使用“_pth”文件,python 将无法识别任何其他环境变量,尤其是 PYTHONPATH。
1赞 RTbecard 1/1/2020
@Y ılmazDurmaz 很晚了......但是你有没有遇到过删除的负面后果?刚做完这个,它就像一个魅力......但感觉好得令人难以置信。python36._pth
1赞 Yılmaz Durmaz 1/2/2020
“._pth”与在受限环境中运行安装有关。删除它可以释放,但当然仍然存在问题,因为我们只有库的“.pyc”文件,而不是源代码。例如,在 IDE 中,因此不会有代码完成。@RTbecard
0赞 tinyhare 2/7/2020
安装 pip 后,您应该将“import site”保留为未注释,它将使 sys.path 中的“\lib\site-packages”@rnso
-1赞 dank8 3/31/2018 #3

Pip 也可以在 python 中以编程方式作为命令访问(此示例安装 pandas):

import pip
pip.main(['install'], 'pandas')

(来源:在代码中安装 python 模块)

评论

0赞 Jon Nordby 3/11/2020
我尝试了这种方法。但是,它生成了一个调用 python 的子进程,并且由于 setuptools 不在 python 路径上,因此它失败了。因此,最好采用其他方法之一
20赞 alexey 4/29/2019 #4

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

  1. 在那里解压 Python Embeddable Distro 存档和 CD
  2. 运行(到达这里python ./get-pip.py)
  3. 要么取消注释文件pythonXX._pth中的字符串,要么将文件夹(至少是 pip)从新创建的文件夹 Lib/site-packages/ 复制到 pythonXX 中.zipimport site

现在有可能python -m pip ...

评论

1赞 Boris Brodski 4/28/2020
在 Win 上使用 python38-64:pip 无法安装任何包。ErrMsg:。 可以是另一个包。import distlib ModuleNotFoundError: No module named 'distlib'distlib
0赞 Tom Charles Zhang 11/3/2023
与 Python 3.10 win64 完美配合。
0赞 Tom Charles Zhang 11/3/2023
注意:要确保 site-packages 被拾取,需要在启动 python 时运行。至于在启动 Python 之前如何影响它,请参阅此处的问题: bugs.python.org/issue28245 基本上,修改python3xx._pth文件。另请参阅 stackoverflow.com/a/50829079/2856597import sys; import os; sys.path.append(os.path.join(sys.executable, 'Lib', 'site-packages'))
9赞 Zombo 12/10/2020 #5

我的解决方案是删除此文件:

python39._pth

这允许 Pip 工作,也允许来自同一目录。 或者,您可以获得以下信息:import

https://nuget.org/packages/python

单击“下载包”,您可以像Zip文件一样提取。

评论

0赞 Mathias Mamsch 10/12/2021
这很有效!也许这应该是公认的答案。谢谢。
0赞 Nelson 1/26/2023
这只会将您的嵌入式版本转换为读取本地环境变量和注册表的普通版本:github.com/pypa/pip/issues/4207#issuecomment-297399016
-1赞 Smak 1/21/2022 #6

下载 https://www.python.org/ftp/python/3.10.1/python-3.10.1-amd64.exe 并将其安装到虚拟盒子中

下载 https://www.python.org/ftp/python/3.10.1/python-3.10.1-embed-amd64.zip 并将其解压缩到 python-3.10.1-embed-amd64

将相应的 Python 安装“python-3.10.1-amd64.exe”中的“include”和“libs”目录从 Virtual Box 复制到 python-3.10.1-embed-amd64

转到 python-3.10.1-embed-amd64 文件夹和:

  • 下载 get-pip.py:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  • 执行 get-pip.py:
python get-pip.py
  • 重命名_pth:
rename python310._pth python310._pth.renamed

设置环境:

set PY_PIP=python-3.10.1-embed-amd64\Scripts
set PY_LIBS=python-3.10.1-embed-amd64\Lib;python-3.10.1-embed-amd64\Lib\site-packages

现在“python -m pip install PACKETNAME”应该可以工作了。 PACKETNAME 在以下设备上进行了测试:

  • pywin32==302
  • psutil==5.8.0
  • pprofile==2.1.0
  • mypy==0.910
  • 枕头==8.4.0
  • Cfractions==1.4.0
  • pyyaml==6.0
  • 人性化==3.13.1

注意:需要编译 C/C++ 的数据包安装也可以。

注意:“python-3.10.1-embed-amd64”的意思是类似于 c:\mypythons\python-3.10.1-embed-amd64

-1赞 Deepthi shanmugasundaram 11/18/2023 #7

我遇到了同样的问题,在尝试了现有答案中的多种方法后,这个简单的解决方案帮助了我!

#My 案例: 我使用嵌入式 zip 文件安装了 python。设置 python 的 env 变量 现在我必须安装 pip。所以我遵循了cli安装

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

它在我的 python 文件夹下创建了 Scripts 和 Lib 文件夹。但我仍然在 cli 上收到“pip is not recognized”消息。

#How 我解决了它:

  1. 转到 python 文件夹,在根目录中,您将找到一个._pth文件。用编辑器打开它,并在底部添加此行

库\站点包

因此,您的文件将如下所示:

python312.zip
.

# Uncomment to run site.main() automatically
#import site
Lib\site-packages

现在保存它并在您的 cmd 中,您可以运行 pip 命令,它会成功!

评论

0赞 sinoroc 11/19/2023
与这个已经存在的答案相比,这个答案似乎没有任何新信息:stackoverflow.com/a/48906746