待办事项: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 |