Python 3:使用pip安装gi包

Håk*_*and 9 python pip matplotlib

我试图使用Python 3 运行这个 Matplotlib示例.要运行它,我需要先安装gi(我正在使用pyenv):

$ python --version
Python 3.6.1
$ pip --version
pip 9.0.1 from /home/hakon/.pyenv/versions/3.6.1/lib/python3.6/site-packages (python 3.6)
$ pip install gi
Collecting gi
  Downloading gi-1.2.tar.gz
Collecting requests (from gi)
  Downloading requests-2.16.0-py2.py3-none-any.whl (85kB)
    100% |????????????????????????????????| 92kB 959kB/s 
Collecting idna<2.6,>=2.5 (from requests->gi)
  Downloading idna-2.5-py2.py3-none-any.whl (55kB)
    100% |????????????????????????????????| 61kB 1.2MB/s 
Collecting chardet<3.1.0,>=3.0.2 (from requests->gi)
  Downloading chardet-3.0.3-py2.py3-none-any.whl (133kB)
    100% |????????????????????????????????| 143kB 1.8MB/s 
Collecting urllib3<1.22,>=1.21.1 (from requests->gi)
  Downloading urllib3-1.21.1-py2.py3-none-any.whl (131kB)
    100% |????????????????????????????????| 133kB 1.8MB/s 
Collecting certifi>=2017.4.17 (from requests->gi)
  Downloading certifi-2017.4.17-py2.py3-none-any.whl (375kB)
    100% |????????????????????????????????| 378kB 284kB/s 
Installing collected packages: idna, chardet, urllib3, certifi, requests, gi
  Running setup.py install for gi ... done
Successfully installed certifi-2017.4.17 chardet-3.0.3 gi-1.2 idna-2.5 requests-2.16.0 urllib3-1.21.1
Run Code Online (Sandbox Code Playgroud)

现在,运行示例:

$ python toolmanager.py 
Traceback (most recent call last):
  File "./toolmanager.py", line 8, in <module>
    import matplotlib.pyplot as plt
  File "/home/hakon/.pyenv/versions/3.6.1/lib/python3.6/site-packages/matplotlib/pyplot.py", line 115, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/home/hakon/.pyenv/versions/3.6.1/lib/python3.6/site-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup
    globals(),locals(),[backend_name],0)
  File "/home/hakon/.pyenv/versions/3.6.1/lib/python3.6/site-packages/matplotlib/backends/backend_gtk3cairo.py", line 6, in <module>
    from . import backend_gtk3
  File "/home/hakon/.pyenv/versions/3.6.1/lib/python3.6/site-packages/matplotlib/backends/backend_gtk3.py", line 10, in <module>
    import gi
  File "/home/hakon/.pyenv/versions/3.6.1/lib/python3.6/site-packages/gi/__init__.py", line 39
    print url
            ^
SyntaxError: Missing parentheses in call to 'print'
Run Code Online (Sandbox Code Playgroud)

好像pip以某种方式安装了Python 2版本?我怎样才能解决这个问题?

zez*_*llo 15

到目前为止,选择的答案有点过时:

  • 2018年pgi最后一次更新
  • 自 2018 年起,PyGObject 可从PyPI用于 python3 。

根据您的环境,仍然可以安装相关的软件包及其依赖项,只需按照文档中的步骤操作即可。

但如果您在 venv 上工作,您可能仍然会ModuleNotFoundError: No module named 'gi' 在导入时偶然发现gi. venv 忽略系统范围的模块。然后只需从您的 venv 运行:(pip install PyGObject或者使用poetry您最喜欢的 python 包管理器)。当然,您仍然需要安装 PyGObject 的依赖项(请参阅上面的文档链接)。


Håk*_*and 6

首先,pip install gi将安装另一个不相关的软件包,正确的名称是pgi。但是运行后:

$ pip uninstall gi
$ pip install pgi
$ python toolmanager.py
[...]
Traceback (most recent call last):
  File "toolmanager.py", line 14, in <module>
    import matplotlib.pyplot as plt
  File "/home/hakon/.pyenv/versions/3.6.1/lib/python3.6/site-packages/matplotlib/pyplot.py", line 115, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/home/hakon/.pyenv/versions/3.6.1/lib/python3.6/site-packages/matplotlib/backends/__init__.py", line 32, in pylab_setup
    globals(),locals(),[backend_name],0)
  File "/home/hakon/.pyenv/versions/3.6.1/lib/python3.6/site-packages/matplotlib/backends/backend_gtk3cairo.py", line 6, in <module>
    from . import backend_gtk3
  File "/home/hakon/.pyenv/versions/3.6.1/lib/python3.6/site-packages/matplotlib/backends/backend_gtk3.py", line 12, in <module>
    raise ImportError("Gtk3 backend requires pygobject to be installed.")
ImportError: Gtk3 backend requires pygobject to be installed.
Run Code Online (Sandbox Code Playgroud)

似乎pygobject无法从PyPI安装Python 3。因此,我尝试从Ubuntu分发软件包中安装所有内容python3-gi

$ sudo apt-get install python3-gi
$ pyenv local system
$ python3 --version
Python 3.5.3
$ python3 toolmanager.py
Run Code Online (Sandbox Code Playgroud)

这很好:)

  • 你怎么知道正确的包是“pgi”? (8认同)

ede*_*rag 5

要安装标准Python,H\xc3\xa5kon H\xc3\xa6gland 答案是最好的选择。

\n\n

但对于备用 python 版本,\n不能使用pip<version>。\n请注意,备用 pip 必须用于匹配备用 python。

\n\n

文档中给出了完整的解释。

\n\n

例如在 openSUSE 上(标准 python 版本 3.6,备用安装的 3.8):

\n\n
> sudo zypper install cairo-devel pkg-config python3-devel gcc gobject-introspection-devel\n> pip3.8 install --user pycairo\n> pip3.8 install --user PyGObject\n> python3.8\nPython 3.8.1 (default, Feb  1 2020, 14:50:41) \n[GCC 7.5.0] on linux\nType "help", "copyright", "credits" or "license" for more information.\n>>> import gi\n>>> \n
Run Code Online (Sandbox Code Playgroud)\n