Recommended way of installing python packages on Arch
If you don't need the python packages for all users then you can install them in your home like this:
pip install --user packagename
Installing in your home will not conflict with the package manager.
By default pip install --user
will install in your "user site" directory. Usually that is something like: /home/lesmana/.local/lib/python3.6/site-packages
.
The following command will print, among others, your "user site" location:
python -m site
To customize the install location:
PYTHONUSERBASE=$HOME/some/dir pip install --user packagename
this will install everything under $HOME/some/dir
to run:
PYTHONUSERBASE=$HOME/some/dir $HOME/some/dir/bin/progname
See the pip manual for more information.
if you do want the python package for all users then the best place to install it is /opt
. for example like this:
PYTHONUSERBASE=/opt/packagedir pip install packagename
(note the missing --user
)
and to run, as above:
PYTHONUSERBASE=/opt/packagedir /opt/packagedir/bin/progname
Background explanation: /opt
is commonly acknowledged by gnu/linux distributions as the directory where the local user or system administrator can install his own stuff. in other words: the package manager of distributions usually do not touch /opt
. this is more or less standardized in the Filesystem Hierarchy Standard
For comfort for the users you will still want to write a wrapper script and place it in /bin
or /usr/bin
. This still bears risk of colliding with the distribution package manager but at least it is just one wrapper script file. So the damage that might be done is minimal. You can name the wrapper script something like local-foo
or custom-foo
to further minimize the risk of collision with the distribution package manager.
Alternatively you can modify PATH
to include /opt/bin
and place your wrapper script there. But this again requires you to modify a (or some) system files where PATH
is defined which again may be overwritten by the distribution package manager.
In short: if you want to install for all users then do so in /opt
. Where you place the wrapper script for comfort is a judgement call.
More Information about /opt
and Filesystem Hierarchy Standard:
- What is the difference between /opt and /usr/local?
- http://www.pathname.com/fhs/2.2/fhs-3.12.html
The right way for ArchLinux
The right way to install PYTHON packages in ArchLinux is using PACMAN! To install packages to Python3 you have to use
sudo pacman -S python-'package'
If you want to install packages from Python2, you have to use
sudo pacman -S python2-'package'
Most python packages are in the ArchLinux repositories and the packages that are not in AUR (ArchLinux User Repositories) - for these packages you have to download the PKGBUILD file and compile. After that, you have to use PACMAN to finish the installation
makepkg -s
sudo pacman -U 'compiled-package'
The second right way for ArchLinux
When the package isn't in the AUR or the PKGBUILD isn't working, you can use PIP to install it to Python3
sudo pip install 'python-package'
or Python2
sudo pip2 install 'python-package'
BE AWARE: when you are using pip
the same installation folder is shared with pacman
and most of time, especially when you are updating all system packages (sudo pacman -Suy
), will raise a conflict error. You always have to prefer the first option above.To solve conflict problems, just uninstall pip
package and install they equivalent package on pacman
(pip uninstall 'python-package'
).
You could give a chance to virtualenv
or even conda
If you are planning to develop some python application or python package your better option is use virtual environments.
For python packaging applications you should try poetry
it is current better option to manage application from start to finish. It is a much better option than requirements.txt
+ setup.py
.
Another more simple option is use python-virtualenv
. This can bring portability to your code and maintain old packages as well. Install it with
sudo pacman -S python-virtualenv
and try this
virtualenv -p /usr/bin/python3 yourenv
source yourenv/bin/activate
pip install package-name
When you create this environment yourenv
, you will setup pip
to install packages only into this environment, not to the entire system.
These other links can be useful with you want to learn more about managing packages on Linux with conda
or virtualenv
:
Installing Python Packages from a Jupyter Notebook
Code Python on ArchLinux
If you follow these rules, your ArchLinux will not break and won't have dependency problems between PACMAN and PIP.
Hope it's useful!
Typically, in a distribution, it's recommended that you use the distribution's package manager. You can of course install things using pip (or, in the perl world, cpan), or compile and install things yourself. However, when you do this, the distribution's package manager doesn't know about them and can't manage dependencies or updates for them.
Using pip is pretty much equivalent to compiling and installing your own package. Do it if you need to, but prefer the distribution's package manager.