当前位置: 首页 > 面试题库 >

来自pip import main的

卫弘义
2023-03-14
问题内容

我正在尝试使用python flask运行网页并将其与MySQL数据库连接,并在安装MySQL软件包时收到此错误。

我正在ec2 Linux AWS上执行此操作。


问题答案:

TL; DR
1. 理想的解决方案(Ubuntu / Debian方式):
$ python -m pip uninstall pip 卸载新的pip 10并保留Ubuntu / Debian提供的补丁pip8。要在系统范围内安装模块,请apt尽可能使用(除非你在virtualenv中),更多在下面。在较旧的Ubuntu / Debian版本中,–user在virtualenvs之外使用pip时,请始终添加标记(~/.local/自2016年以来,默认安装在python-pip和python3-pip中)。

  1. 如果你仍然想单独使用新的pip 10,可以使用3种快速解决方法:

  2. 只需重新打开一个新的bash会话(一个新的终端选项卡,或键入bash)-pip 10可用(请参阅参考资料pip -V)。debian的pip 8仍然安装但已损坏;要么

  3. $ hash -d pip && pip -V 刷新$ PATH中的pip路径名。debian的pip 8仍然安装但已损坏;要么
  4. $ sudo apt remove python-pip && hash -d pip (对于Python 3是python3-pip)-完全卸载debian的pip 8,以使用新的pip 10。
    注意:--user除非你处于virtualenv中,否则你将始终需要将标记添加到非debian提供的pip 10中!Ubuntu / Debian并不真正支持你在virtualenv之外使用系统范围内的pip 10。从不sudo pip

因此,在这里,我们在Ubuntu 16.04 ec2计算机中安装了Python 2.7.12,并且在尝试使用pip时得到ImportError:无法导入名称main。这是由以下命令引起的:它安装了最新的pip版本10以及OS发行版中的python-pip debian软件包的Ubuntu默认pip版本(系统Python安装),完全绕开了Ubuntu 子系统。它破坏了Ubuntu的默认pip:来自python-pip(系统安装到/ usr / bin / pip *)的debian修补启动器脚本试图从新安装的pip 10库中导入main(),但使用不同的导入路径,因此失败。pip install –upgrade pipapt

在pip问题跟踪程序的开发人员线程中将更详细地讨论此错误,包括一些建议的解决方案,例如:

  • $ hash -d pip命令:当hash被调用时,PIP的完整路径是由$ PATH搜索的目录和记忆确定。任何先前记住的路径名都将被丢弃。该-d选项使外壳“忘记”给定包名称的记住位置;要么

  • 同样,你可以简单地重新打开一个新的bash会话(一个新的终端选项卡)以刷新$ PATH中的pip路径名;要么

  • 你可以仅使用版本控制的pip2命令(或pip3针对Python 3)而不是pip调用较早的系统安装的启动器/usr/bin/pip2,而$HOME/.local/bindir中的任何pip脚本(pip,pip2,pip2.7)都将调用你的新用户安装的pip 10版本;

  • 你还可以结合使用版本化的Python命令和-m开关来运行适当的pip副本,例如:
    $ python2 -m pip install --user SomePackage#默认Python 2 $ python2.7 -m pip install --user SomePackage#特别是Python 2.7
    如果你有多个版本的Python并且需要PyPI的扩展,例如作为你的MySQL-python模块(MySQLdb)或Flask-MySQL,用于特定的Python版本。–user仅在virtualenv外部需要此开关。

  • 或者,卸载一个两个点子- 无论是用户安装或系统安装 -来解决冲突:
    $ python -m pip uninstall pip-删除你手动安装的点子有利于从python-PIP Debian软件包以前安装的Ubuntu的版本运(python3- pip for Python 3); 它稍旧一些,但是它可以从PyPI找到并安装最新的模块,并且默认情况下在$ PATH中有一个有效的pip命令;或
    $ sudo apt-get remove python-pip–卸载Ubuntu提供的pip,以使用最新的pip 10;如果无法通过short pip命令访问它,只需将$HOME/.local/bin目录添加到$ PATH环境变量中以使用pip命令(请参见上文)。
    注意:Ubuntu 16.04 pip v8.1.1和最新的pip v10.0.1产生完全相同的PyPI索引搜索结果,并且可以提取相同的模块版本;

  • 最后,你可以完全忽略这两个点,而支持APT,而在Ubuntu仓库中使用以下命令在系统范围内安装Python软件包:
    $ apt search <python-package> #或apt-cache search在较旧的Ubuntu
    $ apt show <python-package> #例如python-flask
    $ sudo apt install <python-package> #或sudo apt-get install
    前缀python-为Python 2的软件包;与python3-一起用于Python3。
    你可能需要标准的apt-get安装方法。例如,在你的情况下:
    python-mysqldb-MySQL的Python接口<-MySQLdb的分支==MySQL-python python-flask-sqlalchemy -SQL Alchemy支持
    python-pymysql-纯Python MySQL驱动程序
    实际上,只要有可能,尤其是在以下情况下,最好使用 Ubuntu存储库中的python-packages 严重的系统依赖性或在系统范围内使用时。当然,与PyPI(只有一个版本)相比,Ubuntu存储库中的Python软件包数量(几千个!)相对较少,因为任何OS存储库都略微落后于PyPI版本。但是APT的好处是,所有Ubuntu提供的软件包都已在Ubuntu中进行了集成测试,加上apt-get可以快速解决诸如C扩展之类的繁重依赖项。作为apt安装的一部分,你将始终获得所需的系统库,但是使用pip则无法保证。
    但是,如果你确实只需要最新(或某些较旧)的软件包版本,或者只能在PyPI上找到它,或者需要隔离模块,则APT可能不是一个选择。那么pip确实是更合适的工具。如果必须使用pip installUbuntu上使用而不是的命令apt-get install,请确保它在隔离的虚拟开发环境中运行,例如在virtualenv(sudo apt-get install python-virtualenv)或使用内置venv模块(仅在python3中可用)或在每个用户级别(pip install --user命令选项)运行,但不是系统范围的(从不sudo pip!)。

注意:sudo pip应避免在Ubuntu / Debian上使用命令(具有root用户访问权限),因为它会干扰系统软件包管理器(apt)的操作,并且在意外升级系统使用的python模块时,可能会影响Ubuntu OS 组件,尤其是通过依赖另一个pip包。建议不要使用Pip更改系统范围的Python软件包,因为这些软件包由Ubuntu上的apt-get管理。



 类似资料:
  • 问题内容: 使用的我可以将任意的数据到数据的URL。有没有办法使用内置的浏览器API 将数据URL转换回实例? 问题答案: 用户Matt一年前提出了以下代码如何在javascript中将dataURL转换为文件对象?,这可能对您有帮助 编辑:正如一些评论者所报道的,BlobBuilder已被弃用了一段时间。这是更新的代码:

  • 问题内容: 由于某种原因,登录完成后无法重定向到/ blog。在我的登录控制器中,我有以下内容。 jQuery Ajax 更新为工作代码 问题答案: AJAX之后,您将无法进行重定向。您需要自己使用Javascript完成。 服务器 客户 这应该工作。

  • 使用的我可以将任意数据转换为Data URL。有没有办法使用内置浏览器apis将Data URL转换回实例?

  • 以前,我在Red Hat提供的Oracle Java SE中使用JavaFX开发应用程序,但似乎不再提供JavaFX了,如https://access.redhat.com/articles/3253281。然而,似乎来自rhel-7-server-rpms存储库的OpenJDK并不是JavaFX附带的。 是否有更好的方法来代替仅仅从Red Hat提供的存储库之外安装包?我不想用自编译的OpenJ

  • 这是我的第一个帖子。作为一名初出茅庐的Android开发者,我几乎每天都在阅读各种主题的SO帖子,但对于这个问题,我没有从谷歌那里找到任何帮助。 我到目前为止的研究: 搜索这个问题比正常情况要难,因为搜索引擎似乎不关心大小写敏感性,而大小写敏感性在这个问题中是至关重要的。搜索谷歌只给了我类本身的链接,旧文章,或者完全不相关的文章。我得到的最接近的是JSONArray和JSONObject,这是一个

  • 我得到了一个例外: 在[source:(String)“{”product_id“:”1420-131617-82“,”sku“:”1420-131617“,”display_sku“:”8dd 355 100-411“,”genart_number“:82,”name“:”bremscheibe“,”description“:null,”additional_info_text“:null,”p

  • 问题内容: 我正在尝试升级到最新的Java Mail实用程序。 从 到(我的意图) 但我找不到用于邮件工件的1.5.1, 但我可以看到 我的问题是为什么更改组ID,如果我更改了1.5.1的组ID,我是否需要更改所有已经存在的邮件实现(程序包名称更改和其他任何内容),vs 和有什么区别? 问题答案: Maven坐标在一段时间前更改为与此处描述的方案兼容。新的坐标在这里。 简而言之: groupId