待办事项:py3 软件包

来自 Alpine Linux
此材料被提议删除...

Alpine 现在专门使用 python3(讨论
在删除之前,请确保没有其他页面链接到这里,并检查页面的历史记录

解释

Python 2 和 3 将模块安装到不同的目录,编译后的字节码(*.pyc文件)是不同的,并且原生扩展链接到不同的 Python 共享库。因此,为了支持这两个版本,我们需要构建两个软件包。由于源代码是相同的,我们将其作为一个 APKBUILD 来完成,它提供两个子软件包py2-py3-。基础软件包py-然后是一个元软件包,它拉取py2-子软件包,如果python2已安装,或者py3-子软件包,如果python3已安装。

操作方法

在开始之前,准备好您的环境以构建软件包(创建 Alpine 软件包)。

  1. 从下面的列表中选择一些软件包。优先级较高的是带有编译代码的软件包(这些软件包具有arch="all").
  2. 检查 Python 软件包是否与 Python 3 兼容。提示:当您查看软件包的setup.py文件时,通常会声明一些分类器,例如编程语言 :: Python :: 2编程语言 :: Python :: 3.
    1. 如果它与 Python 3 兼容,则将其作为注释写入下表。
    2. 如果它与 Python 3 兼容,则继续执行下一步。
  3. 检查软件包中的需求setup.py是否与 abuild 的depends相符。一些 Python 软件包具有额外的依赖项,具体取决于 Python 版本(对于 Alpine 来说,仅 2.7 和 3.5 相关)。
  4. 调整 APKBUILD(见下文)。
  5. 尝试构建它。
  6. 如果一切正常,提交更改(使用类似<repo>/<pkgname>: add py2/py3 subpackages的提交消息)。
  7. 发送拉取请求到https://github.com/alpinelinux/aports

如果您有任何问题,请随时在 IRC #alpine-devel 上提问!

APKBUILD

支持 Python 2 和 Python 3 的软件包的 APKBUILD 应如下所示

pkgname=py-foo
_pkgname=PyFoo
pkgver=1.0.0
pkgrel=1
pkgdesc="A package description"
url="https://github.com/example/foo"
arch="noarch"
license="MIT"
depends="py-bar"
makedepends="python2-dev python3-dev py-setuptools"
subpackages="py2-${pkgname#py-}:_py2 py3-${pkgname#py-}:_py3"
source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz"
builddir="$srcdir/$_pkgname-$pkgver"

build() {
	cd "$builddir"
	python2 setup.py build
	python3 setup.py build
}

package() {
	mkdir -p "$pkgdir"
}

_py2() {
	replaces="$pkgname"
	depends="${depends//py-/py2-}"
	_py python2
}

_py3() {
	depends="${depends//py-/py3-}"
	_py python3
}

_py() {
	local python="$1"
	pkgdesc="$pkgdesc (for $python)"
	depends="$depends $python"
	install_if="$pkgname=$pkgver-r$pkgrel $python"

	cd "$builddir"
	$python setup.py install --prefix=/usr --root="$subpkgdir"
}
  • 如果软件包包含一些编译代码(原生扩展),则添加arch="all"_py()函数中(在 pkgdesc 和 depends 之间)。
  • 如果软件包没有任何依赖项,则省略depends=""_py2()_py3()函数中。
  • 如果软件包使用变量_builddir,则将其替换为builddir(前者是较旧的格式)。

注释

  • _pkgname 是软件包在 PyPI 上的真实名称。

不带 Python 3 支持的 abuild 列表

main

软件包名称 注释
py-alabaster
py-avahi
py-babel
py-backports.ssl_match_hostname 对于 >=py3.4 不需要
py-bluez
py-boto
py-cairo
py-cliapp
py-configshell
py-country
py-dbus
py-django
py-django-contact-form
py-django-djblets
py-django-extra-views
py-django-haystack
py-django-oscar
py-django-pipeline
py-django-registation
py-django-simple-captcha
py-django-sorl-thumbnail
py-django-tables2
py-django-treebeard
py-django-widget-tweaks
py-ediarpc
py-egenix-mx-base 不支持 py3
py-exifread
py-eyed3
py-factory-boy
py-farstream0.1
py-feedparser
py-flask-assets
py-flask-script
py-flask-wtf
py-flup
py-funcsigs
py-fuse
py-gamin
py-gdbm
py-genshi
py-gflags
py-gnome
py-gnome-bonobo
py-gnome-gconf
py-gnome-gnomevfs
py-gnome-libgnome
py-gnutls
py-gobject
py-gobject3
py-google-api-python-client
py-gst0.10
py-gtk
py-gtk-demo
py-gunicorn
py-gv
py-hgtools
py-hiredis
py-hoedown
py-httplib2
py-icu
py-imagesize
py-imaging
py-irc
py-irc-scripts
py-jwt
py-larch
py-ldb
py-libmount
py-libproxy
py-libxml2
py-libxslt
py-lockfile
py-mako
py-mccabe
py-meld3
py-mock
py-munkres
py-musicbrainzngs
py-mutagen
py-mysqldb
py-newt
py-nose
py-oauth2
py-oauth2client
py-parsing
py-pbr
py-pep8
py-pgen
py-phonenumbers
py-pillow
py-purl
py-pygments
py-pylast
py-redis
py-roman
py-rrd
py-rsa
py-samba
py-simpleparse
py-singledispatch 对于 >=py3.3 不需要
py-snowballstemmer
py-sphinx
py-sphinx_rtd_theme
py-subversion
py-talloc
py-tdb
py-templayer
py-tevent
py-tracing
py-ttystatus
py-twisted
py-twitter
py-unbound
py-unidecode
py-uritemplate
py-urlgrabber
py-urlnorm
py-urwid
py-urwid-examples
py-vobject
py-webassets
py-wtforms
py-xml

community

软件包名称 注释
py-acme
py-argh
py-configargparse
py-crcmod
py-dialog
py-distutils-extra
py-django-appconf
py-django-compressor
py-django1.5 未维护版本
py-ethtool
py-gammu
py-gpiozero
py-graphviz
py-gtkglext
py-impacket
py-ipaddr
py-jellyfish
py-libplist
py-libteam
py-livereload
py-lz4
py-mechanize
py-ndg_httpsclient
py-numpy
py-opencl
py-opengl-accelerate
py-parsedatetime
py-pathtools
py-pysqlite
py-rencode
py-rpigpio
py-rpm
py-rtslib
py-sensehat
py-skywriter-hat
py-slowaes
py-sphinx-autobuild
py-tempita
py-udev
py-watchdog
py-zope-component
py-zope-event
py2-impacket
py2-pysqlite
py2-tempita