How to pip install a local python package?

2019-03-27 10:30发布

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.

2条回答
爷、活的狠高调
2楼-- · 2019-03-27 10:38

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:

查看更多
太酷不给撩
3楼-- · 2019-03-27 10:48

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.

查看更多
登录 后发表回答