繁体   English   中英

如果“pip”不可用,如何告诉 Python 使用“pip3”?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM