Skip to main content

Creates the daily pages of a Nautical Almanac using Skyfield

Project description

SFalmanac is a Python 3 script that creates the daily pages of the Nautical Almanac (based on the UT timescale). The generated tables are needed for celestial navigation with a sextant. Although you are strongly advised to purchase the official Nautical Almanac, this program will reproduce the tables with no warranty or guarantee of accuracy.

     smileyMultiprocessing version for increased performance!smiley

SFalmanac-Py3 can now employ multiprocessing (if your processor has multiple cores) reducing the processing time. Single-processing is also available as an option if required. Testing has been successfully performed on Windows 10 and Ubuntu 20.04 LTS. (No testing done on Mac OS.) Compared to single-processing, data processing (excluding conversion from TEX to PDF)

  • … of a 6-day Nautical Almanac is 4x faster on Windows 10; 2x faster on Linux.

  • … of 6-day Event Time Tables is almost 5x faster on Windows 10; 3x faster on Linux.

Windows 10 uses up to 8 threads; Linux uses up to 12 threads in parallel. Testing was performed on a PC with an AMD Ryzen 7 3700X 8-Core (16 threads) Processor. Windows & Mac OS spawn new processes; Linux forks new processes (the code is compatible with both techniques and will also run on CPUs with fewer cores/threads).

Quick Overview

This is the PyPI edition of SFalmanac-Py3 (a Changelog can be viewed here). Version numbering follows the scheme Major.Minor.Patch, whereby the Patch number represents some small correction to the intended release.

NOTE: Version numbering in PyPI restarted from 1.0 as the previous well-tested versions that exist since early 2019 were never published as PyPI packages.

The astronomical library employed is: Skyfield.
SFalmanac uses the Hipparcos catalog as its star database.

If a current version of Skyfield (>= 1.31) is used, you have two options (which one, you specify by manually editing config.py):

  • if “useIERS = False”, the built-in UT1 tables in the installed version of Skyfield will be employed.

  • if “useIERS = True”, for optimal accuracy (specifically for all GHA data), Earth orientation data from IERS (International Earth Rotation and Reference Systems Service) is downloaded and then used until it ‘expires’. It expires after a chosen number of days (also specifiable in config.py). Note that IERS specifies the range of Earth Orientation Parameter (EOP) data from 2nd January 1973 and is updated weekly. Refer to the IERS web site for current information.

Software Requirements


Nearly all of the astronomical computation is done by the Skyfield library.
Typesetting is done typically by MiKTeX or TeX Live.
Here are the requirements/recommendations:

Installation on Windows 10/11; on Linux before Python 3.12; on Mac before MacOS 14

Install a TeX/LaTeX program on your operating system so that pdflatex is available.

Ensure that the pip Python installer tool is installed. You may check that the latest version of SFalmanac is installed:

python -m pip uninstall sfalmanac
python -m pip install sfalmanac

Installing SFalmanac ensures that Skyfield and Pandas (and their dependencies) are also installed. If previous versions of SFalmanac were installed, consider upgrading Skyfield and Pandas thus:

python -m pip install --upgrade skyfield pandas

Thereafter run it with:

python -m sfalmanac

On a POSIX system (Linux or Mac OS), use python3 instead of python in the commands above.

This PyPI edition also supports installing and running in a venv virtual environment.

Finally check or change the settings in config.py. Its location is printed immediately whenever SFalmanac runs.

Installation on Linux with Python 3.12 and higher; on MacOS 14 and higher

More recent versions of Python (on specific operating systems) prevent users installating a PyPI package (such as Skyfield, SFalmanac, numpy, Pandas) in the Python system-wide area. The error message is “This environment is externally managed” and this is intended to avoid a conflict between the distribution’s package manager and Python package management tools as defined in the PEP-668 documentation.

The intention is to persuade users to install PyPI packages in a virtual environment instead, which functions very well. The downside: a virtual environment is typically created in a project folder, so you may require several vitrual environments. However it is NOT wise to “break the rules” and force package installation in the Python system-wide area.

To assist users new to virtual environments, I have provided an Installation guide for Linux. (Package installation for MacOS is in principle the same.)

Guidelines for Linux & Mac OS

Quote from Chris Johnson:

It’s best to not use the system-provided Python directly. Leave that one alone since the OS can change it in undesired ways.

The best practice is to configure your own Python version(s) and manage them on a per-project basis using venv (for Python 3). This eliminates all dependency on the system-provided Python version, and also isolates each project from other projects on the machine.

Each project can have a different Python point version if needed, and gets its own site_packages directory so pip-installed libraries can also have different versions by project. This approach is a major problem-avoider.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sfalmanac-1.12.5.tar.gz (33.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sfalmanac-1.12.5-py3-none-any.whl (33.6 MB view details)

Uploaded Python 3

File details

Details for the file sfalmanac-1.12.5.tar.gz.

File metadata

  • Download URL: sfalmanac-1.12.5.tar.gz
  • Upload date:
  • Size: 33.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.13.0

File hashes

Hashes for sfalmanac-1.12.5.tar.gz
Algorithm Hash digest
SHA256 d6983565dd25269b29cf2d9abf6ee5645973148a5a3c66130c28579e4f4f124c
MD5 607dd9c44139e6e0df36804defa28501
BLAKE2b-256 85a8c95e86af5b3ef672fa8d923d50230a79a91cf91b33defe2d8f9019c2bcad

See more details on using hashes here.

File details

Details for the file sfalmanac-1.12.5-py3-none-any.whl.

File metadata

  • Download URL: sfalmanac-1.12.5-py3-none-any.whl
  • Upload date:
  • Size: 33.6 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.13.0

File hashes

Hashes for sfalmanac-1.12.5-py3-none-any.whl
Algorithm Hash digest
SHA256 e2025f8d37804271c3c2d29f0d8c905ad89368732e462098aaf50ec508ef0d88
MD5 370f5d8d29f952a6ef2d4a5962ac172a
BLAKE2b-256 95c076768403e8d10982179e528b99d4269e3cf3f6c849d7fde53c74f62f29ff

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page