Automating post-install of Python dependency from Git using Poetry

I'm using Poetry for Python dependency management, along with PyCrate for ASN.1 encoding/decoding.

PyCrate is a dependency pulled from GitHub, and once pulled from GitHub, is installed by running a setup file within the PyCrate directory.

python setup.py install

I would like to integrate the installation step into my pyproject.toml, if possible. My current pyproject.toml includes PyCrate as follows:

…
[tool.poetry.dependencies]
pycrate = {git = "https://github.com/P1sec/pycrate.git"}
…

This will pull PyCrate from the GitHub repository, but into the src folder in the virtualenv created by Poetry.

Is there any way to automatically run the setup script when performing a poetry install? I have looked into using Poetry scripts, but haven't been able to get this up and running correctly as of yet.

My current setup involves running a poetry install, then manually running the setup.py install for PyCrate, however I would like to have my poetry install to perform the full setup, if it can be done.

Any help with this would be much appreciated.


Asked by: Adelaide418 | Posted: 06-12-2021






Answer 1

Poetry should already run python setup.py install for you when you run poetry install.

Poetry basically just runs pip install package, which downloads the package, and essentially just runs python setup.py install on the package!

Under the hood, [pip] will run python setup.py install

Source: https://stackoverflow.com/a/15732821/10149169

However, poetry only installs the package inside an isolated virtual environment, to avoid polluting the rest of your computer.

To run something with poetry, you need to run it with poetry run YOUR_COMMAND

In order to run a script inside the virtual environment, you must run poetry shell to enter the virtual environment, or poetry run YOUR_COMMAND. E.g. to run a Python script, you should do poetry run python your_python_script.py

Example

If you have a folder with the following pyproject.toml file:

[tool.poetry]
name = "test"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]

[tool.poetry.dependencies]
python = "^3.6"
pycrate = {git = "https://github.com/P1sec/pycrate.git"}

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

After running poetry install, you can access all the pyrcrate scripts by running poetry run SCRIPT_NAME:

# works because pycrate_showmedia.py was installed with poetry install
me@computer:~/example-project$ poetry run poetry run pycrate_showmedia.py
usage: pycrate_showmedia.py [-h] [-bl BL] [-wt] input
pycrate_showmedia.py: error: the following arguments are required: input

If you have a Python file that imports a pycrate library, it also needs to be run using poetry run:

me@computer:~/example-project$ cat test.py 
import pycrate_core
print(pycrate_core.__version__)
me@computer:~/example-project$ poetry run python test.py

Answered by: Alberta237 | Posted: 07-01-2022



Similar questions

python - How can I add post-install scripts to easy_install / setuptools / distutils?

I would like to be able to add a hook to my setup.py that will be run post-install (either when easy_install'ing or when doing python setup.py install). In my project, PySmell, I have some support files for Vim and Emacs. When a user installs PySmell the usual way, these files get copied in the actual egg, and the user has to fish them out and place th...


packaging - using setuptools with post-install and python dependencies

This is somewhat related to this question. Let's say I have a package that I want to deploy via rpm because I need to do some file copying on post-install and I have some non-python dependencies I want to declare. But let's also say I have some python dependencies that are easily available in Py...


linux - Run post-install script in a Python Egg (setuptools)

I have created a little Python egg (with setuptools) that I want to install in other machines of my LAN. I have even setup a server for the eggs and all (and the egg is properly downloaded and installed with easy_install -f http://myserver/eggrepository ) :-) I would like to know if there's a way of running an script (bash or Python) when installing it with easy_install (version 0.6c11 and python2.6). ...


python - Post-install errors while installing pywin32-216 on Windows XP

I'm using the pywin32-216.win32-py2.6.exe package to install pywin32 on Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32. I am seeing the following post install errors. Could someone help me understand what going wrong? Thanks in advance. Copied pythoncom26.dll to C:\WINDOWS\system32\pythoncom26.dll Copied pythoncomloader26.dll to C:\WINDOWS\sys...


Python packaging distribute post-install step

I am packaging a project that uses nltk. When you install nltk with pip, you get core functionalitiy, but not all the modules that come with it. To get those modules, you call nltk's download method. I tried the following, but it doesn't work, saying ImportError: No module named nltk. I assume this is happening because import nltk occurs before nltk is installed by the call to setup(...).


Are all post-install options for python setuptools broken?

I'm trying to package a build of PyQt (installers aren't provided for the configuration I need), but I can't find any packaging configuration that works. The issue is not specific to PyQt though. The problem: In order for the module to work, it needs a file in python's PREFIX directory. I understand that this may be bad form, but in my case there needs to be a qt.conf file there, and there isn't anything much I c...


python - Post-install setup.py doesn't work

I'm trying to add a post-install step into the setup.py. The installation works but the code inside run(self) is never executed. Things I've tried (with no result): Install it using both "pip install (-e) ." and "python setup.py (develop)" [and later uninstall it, reinstall it, delete .egg-info folder,...] Variations using: do_egg_install, build, bdist_egg,...


python - Pip Post-install Script Interactive Input?

I'm very new to python packaging, and trying to make a pip compatible setup and post-install script for my package for colleagues. The goal of the post-install script is to create a configuration file that will be customized to the end-user and their system, and while I guess I could just have them run a secondary setup script post installation, it seems to make more sense to me to just have the setup.py script and associ...


python - setup.py post-install scripts and pip install extras

I'm developing a package which has a few optional dependencies and 'extras'. Goal: I want the following two things to work: Execute my post-install code Allow for 'extras' installation Status: Currently I have been able to: Use python setup.py install or python setup.py develop to execute post-install ...


python - pipenv Post-Install Actions

I'm using Python via Pharo/GToolkit's PythonBridge, which uses pipenv under the hood. Things are kicked off via this built-in PythonBridge script (install_env.sh): #!/bin/bash cd &quot;$(dirname &quot;$0&quot;)&quot; export PIPENV_VENV_IN_PROJECT=1 pipenv install pipenv ru...






Still can't find your answer? Check out these communities...



PySlackers | Full Stack Python | NHS Python | Pythonist Cafe | Hacker Earth | Discord Python



top