docs: python bindings
* Tightened up the docs a little bit, updated the "what's new" section, dropped the "-draft" version in preparation for GPGME 1.12.0's release. * Exported another .texi version (and updated the draft copies to this commit (which ought to be 1.11.1-beta313). Signed-off-by: Ben McGinnes <ben@adversary.org>
This commit is contained in:
parent
837a476053
commit
76bdfabb05
@ -79,6 +79,7 @@ Known Issues
|
|||||||
* Multiple installations::
|
* Multiple installations::
|
||||||
* Won't Work With Windows::
|
* Won't Work With Windows::
|
||||||
* CFFI is the Best™ and GPGME should use it instead of SWIG::
|
* CFFI is the Best™ and GPGME should use it instead of SWIG::
|
||||||
|
* Virtualised Environments::
|
||||||
|
|
||||||
Fundamentals
|
Fundamentals
|
||||||
|
|
||||||
@ -168,7 +169,7 @@ Copyright and Licensing
|
|||||||
@item Version:
|
@item Version:
|
||||||
@tab 0.1.4
|
@tab 0.1.4
|
||||||
@item GPGME Version:
|
@item GPGME Version:
|
||||||
@tab 1.12.0-draft
|
@tab 1.12.0
|
||||||
@item Author:
|
@item Author:
|
||||||
@tab @uref{https://gnupg.org/people/index.html#sec-1-5, Ben McGinnes} <ben@@gnupg.org>
|
@tab @uref{https://gnupg.org/people/index.html#sec-1-5, Ben McGinnes} <ben@@gnupg.org>
|
||||||
@item Author GPG Key:
|
@item Author GPG Key:
|
||||||
@ -292,12 +293,20 @@ ProtonMail keyserver.
|
|||||||
@item
|
@item
|
||||||
Semi-formalised the location where @ref{Draft Editions of this HOWTO, , draft versions} of this HOWTO may
|
Semi-formalised the location where @ref{Draft Editions of this HOWTO, , draft versions} of this HOWTO may
|
||||||
periodically be accessible. This is both for the reference of
|
periodically be accessible. This is both for the reference of
|
||||||
others and testing the publishing of the document itself.
|
others and testing the publishing of the document itself. Renamed
|
||||||
|
the file at around the same time.
|
||||||
@item
|
@item
|
||||||
Added a new section for @ref{Advanced or Experimental Use Cases, , advanced or experimental use}.
|
Added a new section for @ref{Advanced or Experimental Use Cases, , advanced or experimental use}.
|
||||||
@item
|
@item
|
||||||
Began the advanced use cases with @ref{C plus Python plus SWIG plus Cython, , a section} on using the module with
|
Began the advanced use cases with @ref{C plus Python plus SWIG plus Cython, , a section} on using the module with
|
||||||
@uref{http://cython.org/, Cython}.
|
@uref{http://cython.org/, Cython}.
|
||||||
|
@item
|
||||||
|
Added a number of new scripts to the @samp{example/howto/} directory;
|
||||||
|
some of which may be in advance of their planned sections of the
|
||||||
|
HOWTO (and some are just there because it seemed like a good idea at
|
||||||
|
the time).
|
||||||
|
@item
|
||||||
|
Cleaned up a lot of things under the hood.
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
@node GPGME Concepts
|
@node GPGME Concepts
|
||||||
@ -487,6 +496,12 @@ quite high that at least the first one and maybe two of those will
|
|||||||
already be installed.
|
already be installed.
|
||||||
@end enumerate
|
@end enumerate
|
||||||
|
|
||||||
|
Note that, as with Cython, some of the planned additions to the
|
||||||
|
@ref{Advanced or Experimental Use Cases, , Advanced} section, will bring with them additional requirements. Most
|
||||||
|
of these will be fairly well known and commonly installed ones,
|
||||||
|
however, which are in many cases likely to have already been installed
|
||||||
|
on many systems or be familiar to Python programmers.
|
||||||
|
|
||||||
@node Installation
|
@node Installation
|
||||||
@section Installation
|
@section Installation
|
||||||
|
|
||||||
@ -533,6 +548,7 @@ they be encountered.
|
|||||||
* Multiple installations::
|
* Multiple installations::
|
||||||
* Won't Work With Windows::
|
* Won't Work With Windows::
|
||||||
* CFFI is the Best™ and GPGME should use it instead of SWIG::
|
* CFFI is the Best™ and GPGME should use it instead of SWIG::
|
||||||
|
* Virtualised Environments::
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Breaking Builds
|
@node Breaking Builds
|
||||||
@ -727,6 +743,70 @@ running into trouble with "ifdefs" then you'll know what sort of
|
|||||||
things are lacking. That doesn't even take into account the amount of
|
things are lacking. That doesn't even take into account the amount of
|
||||||
work saved via SWIG's code generation techniques either.
|
work saved via SWIG's code generation techniques either.
|
||||||
|
|
||||||
|
@node Virtualised Environments
|
||||||
|
@subsection Virtualised Environments
|
||||||
|
|
||||||
|
It is fairly common practice amongst Python developers to, as much as
|
||||||
|
possible, use packages like virtualenv to keep various things that are
|
||||||
|
to be installed from interfering with each other. Given how much of
|
||||||
|
the GPGME bindings is often at odds with the usual pythonic way of
|
||||||
|
doing things, it stands to reason that this would be called into
|
||||||
|
question too.
|
||||||
|
|
||||||
|
As it happens the answer as to whether or not the bindings can be used
|
||||||
|
with virtualenv, the answer is both yes and no.
|
||||||
|
|
||||||
|
In general we recommend installing to the relevant path and matching
|
||||||
|
prefix of GPGME itself. Which means that when GPGME, and ideally the
|
||||||
|
rest of the GnuPG stack, is installed to a prefix like @samp{/usr/local} or
|
||||||
|
@samp{/opt/local} then the bindings would need to be installed to the main
|
||||||
|
Python installation and not a virtualised abstraction. Attempts to
|
||||||
|
separate the two in the past have been known to cause weird and
|
||||||
|
intermittent errors ranging from minor annoyances to complete failures
|
||||||
|
in the build process.
|
||||||
|
|
||||||
|
As a consequence we only recommend building with and installing to the
|
||||||
|
main Python installations within the same prefix as GPGME is installed
|
||||||
|
to or which are found by GPGME's configuration stage immediately prior
|
||||||
|
to running the make commands. Which is exactly what the compiling and
|
||||||
|
installing process of GPGME does by default.
|
||||||
|
|
||||||
|
Once that is done, however, it appears that a copy the compiled module
|
||||||
|
may be installed into a virtualenv of the same major and minor version
|
||||||
|
matching the build. Alternatively it is possible to utilise a
|
||||||
|
@samp{sites.pth} file in the @samp{site-packages/} directory of a viertualenv
|
||||||
|
installation, which links back to the system installations
|
||||||
|
corresponding directory in order to import anything installed system
|
||||||
|
wide. This may or may not be appropriate on a case by case basis.
|
||||||
|
|
||||||
|
Though extensive testing of either of these options is not yet
|
||||||
|
complete, preliminary testing of them indicates that both are viable
|
||||||
|
as long as the main installation is complete. Which means that
|
||||||
|
certain other options normally restricted to virtual environments are
|
||||||
|
also available, including integration with pythonic test suites
|
||||||
|
(e.g. @uref{https://docs.pytest.org/en/latest/index.html, pytest}) and other large projects.
|
||||||
|
|
||||||
|
That said, it is worth reiterating the warning regarding non-standard
|
||||||
|
installations. If one were to attempt to install the bindings only to
|
||||||
|
a virtual environment without somehow also including the full GnuPG
|
||||||
|
stack (or enough of it as to include GPGME) then it is highly likely
|
||||||
|
that errors would be encountered at some point and more than a little
|
||||||
|
likely that the build process itself would break.
|
||||||
|
|
||||||
|
If a degree of separation from the main operating system is still
|
||||||
|
required in spite of these warnings, then consider other forms of
|
||||||
|
virtualisation. Either a virtual machine (e.g. @uref{https://www.virtualbox.org/, VirtualBox}), a
|
||||||
|
hardware emulation layer (e.g. @uref{https://www.qemu.org/, QEMU}) or an application container
|
||||||
|
(e.g. @uref{https://www.docker.com/why-docker, Docker}).
|
||||||
|
|
||||||
|
Finally it should be noted that the limited tests conducted thus far
|
||||||
|
have been using the @samp{virtualenv} command in a new directory to create
|
||||||
|
the virtual python environment. As opposed to the standard @samp{python3
|
||||||
|
-m venv} and it is possible that this will make a difference depending
|
||||||
|
on the system and version of Python in use. Another option is to run
|
||||||
|
the command @samp{python3 -m virtualenv /path/to/install/virtual/thingy}
|
||||||
|
instead.
|
||||||
|
|
||||||
@node Fundamentals
|
@node Fundamentals
|
||||||
@chapter Fundamentals
|
@chapter Fundamentals
|
||||||
|
|
||||||
@ -875,6 +955,13 @@ print("""
|
|||||||
""".format(secnum, pubnum))
|
""".format(secnum, pubnum))
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
@strong{NOTE:} The @ref{C plus Python plus SWIG plus Cython, , Cython} introduction in the @ref{Advanced or Experimental Use Cases, , Advanced and Experimental}
|
||||||
|
section uses this same key counting code with Cython to demonstrate
|
||||||
|
some areas where Cython can improve performance even with the
|
||||||
|
bindings. Users with large public keyrings or keyboxes, for instance,
|
||||||
|
should consider these options if they are comfortable with using
|
||||||
|
Cython.
|
||||||
|
|
||||||
@node Get key
|
@node Get key
|
||||||
@section Get key
|
@section Get key
|
||||||
|
|
||||||
@ -2826,6 +2913,12 @@ existing code and to detect Cython's use. The latter comes from the
|
|||||||
@node Miscellaneous extras and work-arounds
|
@node Miscellaneous extras and work-arounds
|
||||||
@chapter Miscellaneous extras and work-arounds
|
@chapter Miscellaneous extras and work-arounds
|
||||||
|
|
||||||
|
Most of the things in the following sections are here simply because
|
||||||
|
there was no better place to put them, even though some are only
|
||||||
|
peripherally related to the GPGME Python bindings. Some are also
|
||||||
|
workarounds for functions not integrated with GPGME as yet. This is
|
||||||
|
especially true of the first of these, dealing with @ref{Group lines, , group lines}.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* Group lines::
|
* Group lines::
|
||||||
* Keyserver access for Python::
|
* Keyserver access for Python::
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
:END:
|
:END:
|
||||||
|
|
||||||
| Version: | 0.1.4 |
|
| Version: | 0.1.4 |
|
||||||
| GPGME Version: | 1.12.0-draft |
|
| GPGME Version: | 1.12.0 |
|
||||||
| Author: | [[https://gnupg.org/people/index.html#sec-1-5][Ben McGinnes]] <ben@gnupg.org> |
|
| Author: | [[https://gnupg.org/people/index.html#sec-1-5][Ben McGinnes]] <ben@gnupg.org> |
|
||||||
| Author GPG Key: | DB4724E6FA4286C92B4E55C4321E4E2373590E5D |
|
| Author GPG Key: | DB4724E6FA4286C92B4E55C4321E4E2373590E5D |
|
||||||
| Language: | Australian English, British English |
|
| Language: | Australian English, British English |
|
||||||
@ -128,10 +128,16 @@ The bullet points of new additiions are:
|
|||||||
ProtonMail keyserver.
|
ProtonMail keyserver.
|
||||||
- Semi-formalised the location where [[#draft-editions][draft versions]] of this HOWTO may
|
- Semi-formalised the location where [[#draft-editions][draft versions]] of this HOWTO may
|
||||||
periodically be accessible. This is both for the reference of
|
periodically be accessible. This is both for the reference of
|
||||||
others and testing the publishing of the document itself.
|
others and testing the publishing of the document itself. Renamed
|
||||||
|
the file at around the same time.
|
||||||
- Added a new section for [[#advanced-use][advanced or experimental use]].
|
- Added a new section for [[#advanced-use][advanced or experimental use]].
|
||||||
- Began the advanced use cases with [[#cython][a section]] on using the module with
|
- Began the advanced use cases with [[#cython][a section]] on using the module with
|
||||||
[[http://cython.org/][Cython]].
|
[[http://cython.org/][Cython]].
|
||||||
|
- Added a number of new scripts to the =example/howto/= directory;
|
||||||
|
some of which may be in advance of their planned sections of the
|
||||||
|
HOWTO (and some are just there because it seemed like a good idea at
|
||||||
|
the time).
|
||||||
|
- Cleaned up a lot of things under the hood.
|
||||||
|
|
||||||
|
|
||||||
* GPGME Concepts
|
* GPGME Concepts
|
||||||
@ -320,6 +326,12 @@ a significant advantage in some way.
|
|||||||
quite high that at least the first one and maybe two of those will
|
quite high that at least the first one and maybe two of those will
|
||||||
already be installed.
|
already be installed.
|
||||||
|
|
||||||
|
Note that, as with Cython, some of the planned additions to the
|
||||||
|
[[#advanced-use][Advanced]] section, will bring with them additional requirements. Most
|
||||||
|
of these will be fairly well known and commonly installed ones,
|
||||||
|
however, which are in many cases likely to have already been installed
|
||||||
|
on many systems or be familiar to Python programmers.
|
||||||
|
|
||||||
|
|
||||||
** Installation
|
** Installation
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
@ -777,6 +789,13 @@ print("""
|
|||||||
""".format(secnum, pubnum))
|
""".format(secnum, pubnum))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
|
*NOTE:* The [[#cython][Cython]] introduction in the [[#advanced-use][Advanced and Experimental]]
|
||||||
|
section uses this same key counting code with Cython to demonstrate
|
||||||
|
some areas where Cython can improve performance even with the
|
||||||
|
bindings. Users with large public keyrings or keyboxes, for instance,
|
||||||
|
should consider these options if they are comfortable with using
|
||||||
|
Cython.
|
||||||
|
|
||||||
|
|
||||||
** Get key
|
** Get key
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
@ -2770,6 +2789,12 @@ existing code and to detect Cython's use. The latter comes from the
|
|||||||
:CUSTOM_ID: cheats-and-hacks
|
:CUSTOM_ID: cheats-and-hacks
|
||||||
:END:
|
:END:
|
||||||
|
|
||||||
|
Most of the things in the following sections are here simply because
|
||||||
|
there was no better place to put them, even though some are only
|
||||||
|
peripherally related to the GPGME Python bindings. Some are also
|
||||||
|
workarounds for functions not integrated with GPGME as yet. This is
|
||||||
|
especially true of the first of these, dealing with [[#group-lines][group lines]].
|
||||||
|
|
||||||
|
|
||||||
** Group lines
|
** Group lines
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
|
Loading…
Reference in New Issue
Block a user