提问人:fluter 提问时间:3/8/2017 最后编辑:Cœurfluter 更新时间:11/18/2023 访问量:56716
带有嵌入式 Python 的 pip
pip with embedded python
问:
我从这里安装了嵌入式 python,标题为“Windows x86-64 可嵌入 zip 文件”,但它没有安装 pip,也没有站点包,当我尝试这样做时,它无法运行,因为这个文件有。那么,如何在嵌入式 python 环境中安装 pip。python get-pip.py
import 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
答:
我最近遇到了同样的问题。我检查了 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 ...
评论
bin_py = os.path.dirname(sys.executable)
bin_user = os.path.dirname(sys.executable)
即使明确指出 Python 的可嵌入版本没有 支持Pip,小心是可能的。您需要:
下载并解压缩 Python 可嵌入的 zip 文件。
在文件或类似文件中,取消对命令的注释。 结果应如下所示:
python39._pth
import
python39.zip . import site
将 get-pip.py 下载到 Python 安装文件夹
跑。这会将 Pip 安装到目录中:
get-pip.py
Scripts
python get-pip.py
直接从命令行运行 Pip,因为 Pip 是一个可执行程序(这个 例如安装 Pandas):
.\Scripts\pip install pandas
您可以在 Pip issue 4207 中找到有关此内容的更多信息
评论
python36._pth
Pip 也可以在 python 中以编程方式作为命令访问(此示例安装 pandas):
import pip
pip.main(['install'], 'pandas')
(来源:在代码中安装 python 模块)
评论
我如何将 pip 安装到可嵌入的 python 发行版中:
- 在那里解压 Python Embeddable Distro 存档和 CD
- 运行(到达这里
python ./get-pip.py
) - 要么取消注释文件pythonXX._pth中的字符串,要么将文件夹(至少是 pip)从新创建的文件夹 Lib/site-packages/ 复制到 pythonXX 中.zip
import site
现在有可能python -m pip ...
评论
import distlib ModuleNotFoundError: No module named 'distlib'
distlib
import sys; import os; sys.path.append(os.path.join(sys.executable, 'Lib', 'site-packages'))
我的解决方案是删除此文件:
python39._pth
这允许 Pip 工作,也允许来自同一目录。
或者,您可以获得以下信息:import
https://nuget.org/packages/python
单击“下载包”,您可以像Zip文件一样提取。
评论
下载 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
我遇到了同样的问题,在尝试了现有答案中的多种方法后,这个简单的解决方案帮助了我!
#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 我解决了它:
- 转到 python 文件夹,在根目录中,您将找到一个._pth文件。用编辑器打开它,并在底部添加此行
库\站点包
因此,您的文件将如下所示:
python312.zip
.
# Uncomment to run site.main() automatically
#import site
Lib\site-packages
现在保存它并在您的 cmd 中,您可以运行 pip 命令,它会成功!
评论