Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pip install a local python package?

Question

I installed a local package called credentials using

pip install -e c:\users\worker\src\clockwork\lib\credentials 

But when I try to import the package from a sibling directory, it fails with an ImporError:

cd c:\users\worker\src\clockwork\bank python -c "import credentials" ... ImportError: No module named 'credentials' 

Confusingly, the package credentials is listed as successfully installed as shown when I run pip list:

... credentials (1.0.0, c:\users\worker\src\clockwork\lib\credentials) ... 

How can I install my local package so that it can be imported?

Background

I am using Python 3.4 (32-bit). The package contains two files:

credentials\__init__.py credentials\setup.py 

The __init__.py file defines a single function. The setup.py file is short:

from distutils.core import setup  setup(name='credentials', version='1.0.0') 

Workaround

I currently add the directory containing the package (c:\users\worker\src\clockwork\lib) to my PATH variable as a workaround. But my question is how to install the package properly so that I do not need to modify the PATH.

like image 288
expz Avatar asked Feb 27 '17 19:02

expz


People also ask

Can you pip install a local package?

Install the downloaded package into a local directory : python get-pip.py --user This will install pip to your local directory (. local/bin) . Now you may navigate to this directory (cd . local/bin) and then use pip or better set your $PATH variable this directory to use pip anywhere : PATH=$PATH:~/.

How do I install a local package in Python?

To install a package that includes a setup.py file, open a command or terminal window and: cd into the root directory where setup.py is located. Enter: python setup.py install.


2 Answers

Uninstall the python package then install it using:

python -m pip install -e c:\users\worker\src\clockwork\lib\credentials 

What is probably happening is that you have multiple python installs and pip is run from one install while you are trying to use the package from another. See also:

  • What's the difference between pip install and python -m pip install?
  • https://docs.python.org/3/installing/#basic-usage
like image 125
Mr_and_Mrs_D Avatar answered Sep 21 '22 01:09

Mr_and_Mrs_D


The problem centers on setup.py. It needs to declare a package:

from distutils.core import setup  setup(name='credentials', version='1.0.0', packages=['credentials']) 

But this setup.py must be in the parent directory of the credentials package, so in the end, the directory structure is:

...\credentials\setup.py ...\credentials\credentials\__init__.py 

With this change, the module is found after reinstalling the package.

This could also be caused by two Python installs (but wasn't in my case), and @Mr_and_Mrs_D gives an answer for that case.

like image 37
expz Avatar answered Sep 20 '22 01:09

expz