Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sharing a python script with module requirements?

Tags:

python

pip

I'm new to python and was curious if python had something like an npm install that would pip install the required packages for a script I have. I've looked into the setup.py readme and it looks like its mostly geared to creating a tarball to send to pip, which isn't what I want.

I'd like to be able to check out the source code and then just run it. As it stands when I ask my coworkers to use the script they run into import failures and have to manually pip install things which is a poor experience.

My setup.py file is

#!/usr/bin/env python

from distutils.core import setup

setup(name='Add-Webhook',
      version='1.0',
      description='Adds webhooks to git repos',
      author='devshorts',
      packages=['requests'],
     )

And when I run it it

$ python setup.py install
running install
running build
running build_py
error: package directory 'requests' does not exist

I have a small script that sits next to the setup.py that uses the requests package and I'd like for it to be installed on 'install'

$ ls
total 40
-rw-r--r--  1 akropp  JOMAX\Domain Users  1039 Feb 24 09:51 README.md
-rwxr-xr-x  1 akropp  JOMAX\Domain Users  4489 Feb 27 17:01 add-webhook.py
-rw-r--r--  1 akropp  JOMAX\Domain Users   391 Feb 23 14:24 github.iml
-rw-r--r--  1 akropp  JOMAX\Domain Users   213 Apr  8 15:06 setup.py
like image 657
devshorts Avatar asked Feb 10 '23 11:02

devshorts


2 Answers

Create requirements.txt file in your project's root directory, and add necessary Python packages with the versions you need.

Then just run $pip install -r requirements.txt to install everything that you have specified in requirements.txt file.

Not sure if this is what you need, but this is something better than running $pip install <package name> for several times.

like image 186
hyunchel Avatar answered Feb 13 '23 03:02

hyunchel


You have misunderstood the parameters for setup. The packages parameter is for specifying the packages that you are providing, not the dependencies of those packages.

Per the documentation:

Dependencies on other Python modules and packages can be specified by supplying the requires keyword argument to setup(). The value must be a list of strings. Each string specifies a package that is required, and optionally what versions are sufficient.

You could also consider using setuptools instead of distutils (switch to from setuptools import setup) and specifying install_requires (see the docs on dependency declarations) - see e.g. Differences between distribute, distutils, setuptools and distutils2?

like image 44
jonrsharpe Avatar answered Feb 13 '23 02:02

jonrsharpe