ติดตั้ง py3cairo สำหรับ Python 3.6

ฉันกำลังพยายามติดตั้ง pygobject แต่หนึ่งในการอ้างอิงคือ py3cairo ฉันได้ติดตั้งมันเพื่อใช้กับ Python 3.4 แล้ว แต่ตอนนี้ฉันต้องการใช้กับ Python 3.6

ฉันรู้ว่าสามารถติดตั้งด้วย sudo apt-get install python3-cairo ได้ แต่มันบอกว่าติดตั้งแล้ว:

$ sudo apt-get install python3-cairo
Reading package lists... Done
Building dependency tree       
Reading state information... Done
python3-cairo is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

อย่างไรก็ตาม,

Python 3.6.0 (default, Feb 20 2017, 17:34:58) 
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import gi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'gi'
>>> import cairo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'cairo'
>>> quit()
brandon@bjd2385:~/Downloads$ python3.4
Python 3.4.2 (default, Oct  8 2014, 10:45:20) 
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import gi
>>> import cairo

ความพยายามที่จะสร้าง/ติดตั้งจากแหล่งที่มานั้นน่าเกลียด เนื่องจากฉันได้รับปัญหา ประเภท ทั้งหมด:

$ PYTHON="python3.6" ./waf configure
  ./options()
Setting top to                           : /home/brandon/Downloads/pycairo-1.10.0 
Setting out to                           : /home/brandon/Downloads/pycairo-1.10.0/build_directory 
  ./configure()
Checking for 'gcc' (c compiler)          : ok 
Checking for program python              : python3.6 
python executable 'python3.6' different from sys.executable '/usr/local/bin/python3.6'
Checking for python version              : (3, 6, 0, 'final', 0) 
Traceback (most recent call last):
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Scripting.py", line 93, in waf_entry_point
    run_commands()
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Scripting.py", line 145, in run_commands
    run_command(cmd_name)
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Scripting.py", line 138, in run_command
    ctx.execute()
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Configure.py", line 124, in execute
    super(ConfigurationContext,self).execute()
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Context.py", line 87, in execute
    self.recurse([os.path.dirname(g_module.root_path)])
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Context.py", line 127, in recurse
    user_function(self)
  File "/home/brandon/Downloads/pycairo-1.10.0/wscript", line 29, in configure
    ctx.check_python_headers()
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Configure.py", line 217, in fun
    return f(*k,**kw)
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Tools/python.py", line 146, in check_python_headers
    result=conf.check(lib=name,uselib='PYEMBED',libpath=path,mandatory=False,msg='Checking for library %s in LIBDIR'%name)
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Configure.py", line 217, in fun
    return f(*k,**kw)
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Tools/c_config.py", line 357, in check
    ret=self.run_c_code(*k,**kw)
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Configure.py", line 217, in fun
    return f(*k,**kw)
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Tools/c_config.py", line 435, in run_c_code
    bld.compile()
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Build.py", line 190, in compile
    self.store()
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Utils.py", line 300, in f
    ret=fun(*k,**kw)
  File "/home/brandon/Downloads/pycairo-1.10.0/.waf3-1.6.4-e3c1e08604b18a10567cfcd2d02eb6e6/waflib/Build.py", line 164, in store
    cPickle.dump(data,f)
AttributeError: Can't pickle local object 'Context.__init__.<locals>.node_class'
Checking for library python3.6 in LIBDIR : 

ฉันจะติดตั้ง py3cairo และแก้ไขปัญหาเหล่านี้ได้อย่างไร


person bjd2385    schedule 21.02.2017    source แหล่งที่มา


คำตอบ (1)


ฉันกำลังพยายามทำสิ่งเดียวกัน คอมไพล์ pycairo ด้วย python3.6 บน Slackware 14.2 ฉันได้รับข้อผิดพลาดแบบเดียวกับคุณ และแพตช์ waf ต่างๆ ที่กล่าวถึงก็ใช้ไม่ได้เช่นกัน

ฉันได้ก้าวหน้าไปหนึ่งครั้งในการแสวงหานี้ distro slackware-current มีสคริปต์ waf ซึ่งดูเหมือนว่าจะทำงาน อยู่ที่ http://ftp.slackware.com/pub/slackware/slackware-current/source/l/pycairo/

ข้อผิดพลาดข้างต้นที่คุณกล่าวถึงหายไปจากสคริปต์นี้ แต่มีข้อผิดพลาดอื่นปรากฏขึ้นเมื่อพยายามคอมไพล์โดยมีข้อผิดพลาดใน cairomodule.c

บิวด์ปัจจุบันของ slackware เกือบจะทำได้ แต่ก็ยังล้มเหลวด้วยข้อผิดพลาดในการคอมไพล์ บางทีผู้ที่มีประสบการณ์เกี่ยวกับ libs มากกว่าสามารถแก้ไขได้

person zentara    schedule 19.03.2017
comment
สิ่งนี้มีประโยชน์ ฉันจะลองดูว่าจะเกิดอะไรขึ้น - person bjd2385; 19.03.2017