From c9aa6084e9cbed8a0b072ed0d71657a87d8577bd Mon Sep 17 00:00:00 2001 From: Mario Voigt Date: Sat, 6 May 2023 22:46:27 +0200 Subject: [PATCH] Update readme --- README.md | 137 +++++++++++++++++++++++++++++- docs/images/upgrade-extension.png | Bin 0 -> 34844 bytes docs/images/zip-download.png | Bin 0 -> 14880 bytes requirements.txt | 35 ++++++++ 4 files changed, 169 insertions(+), 3 deletions(-) create mode 100644 docs/images/upgrade-extension.png create mode 100644 docs/images/zip-download.png create mode 100644 requirements.txt diff --git a/README.md b/README.md index 5d13b13..63e9bdd 100644 --- a/README.md +++ b/README.md @@ -39,17 +39,148 @@ At least this repo will help to bring alife some good things and will show hidde * some extensions require custom Python installation/modules. See documentation at our FabLab Chemnitz Wiki (see below). * some extensions require additional commands, packages or other installers (see documentation too). -# Installation way 1: with git dependencies +# Structure -The structure of this repo is intended the be easy. Just copy the complete MightyScape folder or the folders you want to your Inkscape's extension directory. You will find redundancies in this repo like node.exe (NodeJS). We did it this way to give easy possibilty to only pick the extensions you want (instead creating hundreds of repositories). MightyScape does not work with any releases or feature branches. Just use "git clone" to get the recent commit from master branch. Please see at https://y.stadtfabrikanten.org/mightyscape-overview for installation tips like required python modules, file locations and other adjustments. +The structure of this repo is intended the be easy. Just copy the complete MightyScape folder (or the particular folders you want) to your Inkscape's extension directory. You will find redundancies in this repo like node.exe (NodeJS). We did it this way to give easy possibilty to only pick the extensions you want. MightyScape does not work with any releases or feature branches. -# Installation way 2: with zip archives (mirrors) +# Installation + +Please read this first before opening issues! This documentation does not maintain any progressive information about installing or handling Inkscape itself. + +## Unsupported Inkscape versions + +MightyScape **does not support the snap version** and also **no** **[AppImage]([https://inkscape.org/release/inkscape-dev/gnulinux/appimage/dl](https://inkscape.org/release/inkscape-dev/gnulinux/appimage/dl/))** version of Inkscape. The snap edition comes with restrictions, letting a lot of extensions fail to work. The reason is missing access to external python interpreter.s Libraries like openmesh or pyclipper cannot be used this way. The AppImage version will fail for a lot extension too, because subprocesses from the AppImage have no acccess to `/tmp `directory. You can still install MightyScape with snap or AppImage version but beware to get different errors. Feel free to contribute solutions to fix these issues. + +### Supported Inkscape versions + +MightyScape supports + +- Windows + + - Inkscape portable (from zip or tar.gz) + + - regular installation with MSI Setup + +- Linux + + - regular installation from package manager like dnf/yum or apt + + `sudo apt install inkscape #Ubuntu` + `sudo dnf install inkscape #Fedora` + +- MacOS + + - this was never tested. We are sorry! + +## Installation of prerequisites - python interpreter + +MightyScape relies on the Python interpreter which is used by the OS. As we need to install some external dependencies (python modules, partially with C bindings), we cannot rely on the bundled Python version, which comes with Inkscape. For this reason we need to adjust the main configuration of inkscape to apply this change. +**Note:** Using a custom Python environment on Windows wil make the official Inkscape Extensions Manager impossible to run. The reason is the library `pygobject`. + +**On Linux this might look like:** + +``` +vim ~/.config/inkscape/preferences.xml +``` + +Add the following line in the section id="extensions": + +``` + + +## Installation way 2: with zip archives (mirrors) If you only want to download single parts of MightyScape, use one of the following mirrors: * https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.2-zipmirror * https://github.com/eridur-de/mightyscape-1.2-zipmirror +You can put the extracted files into your local or global Inkscape extension directory. Please refer to the [official documentation](https://inkscape-manuals.readthedocs.io/en/latest/extensions.html#installing-extensions). + +## ## Upgrading MightyScape + +There are two ways to upgrade MightyScape. Choose from: + +1. if you installed MightyScape using git clone, just go to the git directory and run `git pull` or use the extension "Upgrade MightyScape", which can be found in Extensions → FabLab Chemnitz → Upgrade MightyScape + - There is some special updater extension which allows to update the complete MightyScape package once it was properly pulled by git. You need to install `GitPython` library to use the updater: + + +2. if you previously downloaded a bulk zip file from github or gitea, just replace the content of the containing folder with the new files + +## Upgrading Python modules + +Sometimes it can help to upgrade python modules. This section shows some useful shell lines (**but be warned to use them on your own risk**): + +``` +pip list --outdated + +#Linux: +pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U + +#Windows: +for /F "delims= " %i in ('pip list --outdated') do pip install -U %i +``` + # Issues, questions, documentation, examples This repo has two remotes: diff --git a/docs/images/upgrade-extension.png b/docs/images/upgrade-extension.png new file mode 100644 index 0000000000000000000000000000000000000000..2875d8cd3602bc1e2f86fe1a1f9a7a37c60929e3 GIT binary patch literal 34844 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 literal 0 HcmV?d00001 diff --git a/docs/images/zip-download.png b/docs/images/zip-download.png new file mode 100644 index 0000000000000000000000000000000000000000..937be6a550794e9ebaf531a375fcba1f20cec4cc GIT binary patch literal 14880 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 literal 0 HcmV?d00001 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..444b286 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,35 @@ +debugpy +lxml +moderngl +numpy +networkx +openmesh +opencv-python +pyclipper +pillow +scipy +scour +shapely +svg-to-gcode +svgpathtools +vpype +vpype-dxf +GitPython #required by mightyscape updater extension +wheel +pytesseract +cairosvg +PyQt5 +PySide6 +brother_ql #required by iventory_sticker extension +cssselect #required by boxes.py and mightyscape updater extension +affine #required by boxes.py extension + +#vpype occult plugin setup +git+https://github.com/abey79/occult.git#egg=occult + +#vpype deduplicate plugin setup +tqdm +git+https://github.com/LoicGoulefert/deduplicate.git#egg=deduplicate + +#plycutter +git+https://github.com/tjltjl/plycutter.git