pycopy-lib is a project to develop a non-monolithic standard library for the Pycopy project (https://github.com/pfalcon/pycopy), while where possible, staying compatible with other variants and implementations of Python. The goals of the project are:
Each module or package of pycopy-lib
is available as a separate
distribution package from PyPI. Each module comes from one of the following
sources (and thus each module has its own licensing terms):
As mentioned above, the main target of pycopy-lib is the "Unix" port of Pycopy.Actual system requirements vary per module. Modules not related to I/O may also work without problems on bare-metal ports, not just on "Unix" port (e.g. esp8266).
pycopy-lib packages are published on PyPI (Python Package Index), the standard Python community package repository: http://pypi.python.org/ . On PyPI, you can search for Pycopy related packages and read additional package information. All pycopy-lib package names are prefixed with "pycopy-".
Browse available packages via this URL. (Note: this may also include 3rd-party modules which are not part of pycopy-lib.)
To install packages from PyPI for usage on your local system, use the
upip
tool, which is Pycopy's native package manager, similar to
pip
, which is used to install packages for CPython. upip
is bundled
with Pycopy "Unix" port (i.e. if you build "Unix" port, you
automatically have upip
tool). Following examples assume that
pycopy
binary is available on your PATH
:
$ pycopy -m upip install pycopy-pystone
...
$ pycopy
>>> import pystone
>>> pystone.main()
Pystone(1.2) time for 50000 passes = 0.534
This machine benchmarks at 93633 pystones/second
Run pycopy -m upip --help
for more information about upip
.
While pycopy-lib focuses on Pycopy, sometimes it may be beneficial
to run Pycopy code using CPython, e.g. to use code coverage, debugging,
etc. tools available for it. To facilitate such usage, pycopy-lib also
provides reimplementations ("backports") of Pycopy modules, which
run on CPython. This first of all applies to the builtin Pycopy "u"
modules, but as time goes on, backports of pycopy-lib's own modules can
be provided. Backport modules are in the directories named cpython-*
of
this repository. On PyPI, these named
pycopy-cpython-*.
These modules should be installed with CPython's pip3 tool. Example session:
$ pip3 install --user pycopy-cpython-uhashlib
...
$ python3
...
>>> import uhashlib
>>> uhashlib.sha1(b"test").hexdigest()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'sha1' object has no attribute 'hexdigest'
# Pycopy's uhashlib doesn't have hexdigest(), use ubinascii.hexlify(.digest())
>>> uhashlib.sha1(b"test").digest()
b'\xa9J\x8f\xe5\xcc\xb1\x9b\xa6\x1cL\x08s\xd3\x91\xe9\x87\x98/\xbb\xd3'
To install modules during development, use make install
. By default, all
available packages will be installed. To install a specific module, add the
MOD=<module>
parameter to the end of the make install
command.
pycopy-lib is a community project and can be implemented "fully" only by contributions from interested parties. The contributions are expected to adhere to Contribution Guidelines.
pycopy-lib is developed and maintained by Paul Sokolovsky (@pfalcon) with the help of Pycopy community.
While pycopy-lib's primary way is to provide implementation of Python standard library, pycopy-lib goes further and hosts some extension modules which are deemed to be worth being a part of "Pycopy standard library". This section lists them to easy discovery:
string
, function variants of bytes
methods.