![](/img/trans.png)
[英]how to use pip3 or pip in pyenv for virtul python I created?
[英]How to tell Python to use 'pip3' if 'pip' isn't available?
我正在尝试在 Python 中建立一个网站制造商,它一直在工作,直到我决定放音效,这需要playsound
。 在为自动安装库搜索 StackOverflow 后,我找到了答案并将其弹出到setup.py
中。 然后我在 Windows 中运行代码以检查它是否有效 - 它确实有效,但后来我记得 macOS 和 Linux (根据我的经验)不能使用pip
pip3
。 所以我在设置文件中写了一个例外,所以每当在ModuleNotFoundError
序列期间弹出pip
时,它都会使用pip3
代替。 然而,我得到的(在 Ubuntu 中)是这样的:
bye@DESKTOP-L5UUI0C:/mnt/f/pythonexperements/webmaker$ python3 1.py
__ __ _ _ _ __ __ _
\ \......../ / | |.......(_| |.......| \/ |.....| |..............
.\ \../\../ _..| |__ ___ _| |_ ___..| \ / |.__ _| |._____ _ __ ..
..\ \/ \/ / _ | '_ \/ __| | __/ _ \.| |\/| |/ _` | |/ / _ | '__|..
...\ /\ | __| |_) \__ | | || __/.| |..| | (_| | | __| |.....
....\/..\/.\___|_.__/|___|_|\__\___|.|_|..|_|\__,_|_|\_\___|_|.....
by ByeMC; v1.0
Installing required libraries, installing "playsound"
Traceback (most recent call last):
File "1.py", line 13, in <module>
from playsound import playsound
ModuleNotFoundError: No module named 'playsound'
During handling of the above exception, another exception occurred: # this is exactly what the terminal produced, please don't edit this line
Traceback (most recent call last):
File "1.py", line 16, in <module>
import setup
File "/mnt/f/pythonexperements/webmaker/setup.py", line 3, in <module>
import pip
ModuleNotFoundError: No module named 'pip'
该程序的主要脚本:
[...]
print(asciiart)
try:
from playsound import playsound
except ModuleNotFoundError:
print('Installing required libraries, installing "playsound"')
import setup
install('playsound')
print('Install done')
playsound('notif')
[...]
自动安装库的代码:
# Setup files
import pip
depend = ['playsound']
def install(package):
import importlib
try:
importlib.import_module(package)
except ImportError:
try:
import pip
pip.main(['install', package])
except ModuleNotFoundError:
import pip3
pip3.main(['install', package])
finally:
globals()[package] = importlib.import_module(package)
for x in depend:
install(x)
如果你能帮助我,我会很高兴。
pip
是一个命令行程序。 虽然它在 Python 中实现,因此可以通过导入 pip 从您的 Python 代码中获得,但您不能以这种方式使用 pip 的内部 API
pip 代码假定由程序的全局 state 单独控制。 pip 管理诸如日志系统配置或标准 IO 流的值之类的事情,而不考虑用户代码可能受到影响的可能性。
pip 的代码不是线程安全的。 如果您要在线程中运行 pip,则无法保证您的代码或 pip 会按预期工作。
pip 假定一旦完成工作,进程将终止。 它不需要处理其他代码在该点之后继续运行的可能性,因此(例如)在同一进程中调用 pip 两次可能会出现问题。
有关此主题的更多信息: https://pip.pypa.io/en/latest/user_guide/#using-pip-from-your-program
您可以尝试另一种安装模块的方法,可能是这样的:
import subprocess
import sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "module_name"])
import os
os.system('pip install module_name')
如果 pip 不可用,另一种方法是更基本的方法,使用内置模块下载tar.gz
:
#python3
import requests
r = requests.get("https://files.pythonhosted.org/packages/4e/0b/cb02268c90e67545a0e3a37ea1ca3d45de3aca43ceb7dbf1712fb5127d5d/Flask-1.1.2.tar.gz",allow_redirects=True)
with open("Flask-1.1.2.tar.gz","wb") as f:
f.write(r.content)
#python2
import urllib
r = urllib.URLopener()
r.retrieve("https://files.pythonhosted.org/packages/4e/0b/cb02268c90e67545a0e3a37ea1ca3d45de3aca43ceb7dbf1712fb5127d5d/Flask-1.1.2.tar.gz", "Flask-1.1.2.tar.gz")
之后只需解压缩存档并cd
进入目录并安装模块python setup.py install --user
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.