待办事项:py3 软件包
Alpine 现在专门使用 python3(讨论) |
解释
Python 2 和 3 将模块安装到不同的目录,编译后的字节码(*.pyc文件)是不同的,并且原生扩展链接到不同的 Python 共享库。因此,为了支持这两个版本,我们需要构建两个软件包。由于源代码是相同的,我们将其作为一个 APKBUILD 来完成,它提供两个子软件包py2-和py3-。基础软件包py-然后是一个元软件包,它拉取py2-子软件包,如果python2已安装,或者py3-子软件包,如果python3已安装。
操作方法
在开始之前,准备好您的环境以构建软件包(创建 Alpine 软件包)。
- 从下面的列表中选择一些软件包。优先级较高的是带有编译代码的软件包(这些软件包具有arch="all").
- 检查 Python 软件包是否与 Python 3 兼容。提示:当您查看软件包的setup.py文件时,通常会声明一些分类器,例如编程语言 :: Python :: 2和编程语言 :: Python :: 3.
- 如果它不与 Python 3 兼容,则将其作为注释写入下表。
- 如果它与 Python 3 兼容,则继续执行下一步。
- 检查软件包中的需求setup.py是否与 abuild 的depends相符。一些 Python 软件包具有额外的依赖项,具体取决于 Python 版本(对于 Alpine 来说,仅 2.7 和 3.5 相关)。
- 调整 APKBUILD(见下文)。
- 尝试构建它。
- 如果一切正常,提交更改(使用类似<repo>/<pkgname>: add py2/py3 subpackages的提交消息)。
- 发送拉取请求到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 |
