python pip - install from local dir
Solution 1
All you need to do is run
pip install /opt/mypackage
and pip will search /opt/mypackage
for a setup.py
, build a wheel, then install it.
The problem with using the -e
flag for pip install
as suggested in the comments and this answer is that this requires that the original source directory stay in place for as long as you want to use the module. It's great if you're a developer working on the source, but if you're just trying to install a package, it's the wrong choice.
Alternatively, you don't even need to download the repo from Github at all. pip supports installing directly from git repos using a variety of protocols including HTTP, HTTPS, and SSH, among others. See the docs I linked to for examples.
Solution 2
You were looking for help on installations with pip. You can find it with the following command:
pip install --help
Running pip install -e /path/to/package
installs the package in a way, that you can edit the package, and when a new import call looks for it, it will import the edited package code. This can be very useful for package development.
Related videos on Youtube
Tampa
Updated on May 29, 2021Comments
-
Tampa over 2 years
I have to download a git python repo and install since the pypi version is not updated.
Normally I would do this:
pip install mypackage pip install mypackage[redis]
Now I have the repo cloned in the following folder:
/opt/mypackage
So how to I run to install the below not using the pypi version but the local?
pip --flag /opt/mypackage install mypackage pip --flag /opt/mypackage install mypackage[redis]
There are the pip flags available and I don't see how to accomplish :
Commands: install Install packages. uninstall Uninstall packages. freeze Output installed packages in requirements format. list List installed packages. show Show information about installed packages. search Search PyPI for packages. wheel Build wheels from your requirements. help Show help for commands. General Options: -h, --help Show help. --isolated Run pip in an isolated mode, ignoring environment variables and user configuration. -v, --verbose Give more output. Option is additive, and can be used up to 3 times. -V, --version Show version and exit. -q, --quiet Give less output. --log <path> Path to a verbose appending log. --proxy <proxy> Specify a proxy in the form [user:passwd@]proxy.server:port. --retries <retries> Maximum number of retries each connection should attempt (default 5 times). --timeout <sec> Set the socket timeout (default 15 seconds). --exists-action <action> Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup. --trusted-host <hostname> Mark this host as trusted, even though it does not have valid or any HTTPS. --cert <path> Path to alternate CA bundle. --client-cert <path> Path to SSL client certificate, a single file containing the private key and the certificate in PEM format. --cache-dir <dir> Store the cache data in <dir>. --no-cache-dir Disable the cache. --disable-pip-version-check
-
fabianegli almost 7 yearsI think you are looking for the -e flag.
pip install -e .
inside the package directory should work.
-
-
Tampa almost 7 yearsBut I need to install an optional dependency e.g. mypackage[redis] How is that addressed? There are about 15 optional dependency install but I just need 1.
-
MattDMo almost 7 years@Tampa as far as I can tell,
pip install /opt/mypackage[redis]
should work. -
Adam Hughes over 3 yearsThank you! Yes - when I used
-e
with a conda environment, it installed to the wrong place (ie to the calling directory). Dropped -e flag and installed to my conda site packages -
MattDMo over 3 yearsAs I explained in my answer, installing with
-e
requires that the package source stay in the same place (/opt/mypackage
in this case) forever, which may not be desirable, or even possible if it's in/tmp
. Pointingpip
directly to the directory containingsetup.py
is definitely the way to go here.