Python environment on mac

Cameron Simpson cs at zip.com.au
Tue Jul 26 20:58:28 EDT 2016


On 26Jul2016 06:52, Crane Ugly <vostrushka at gmail.com> wrote:
>Mac OS X comes with its own version of python and structure to support it.
>So far it was good enough for me. Then I started to use modules that distributed through MacPorts and this is where I get lost.
>I do not quite understand how Python environment is set. Or how to set it in a way of using, say MacPorts distribution alone.
>For example: standard location for pip utility is /usr/local/bin/pip. MacPorts structure has it too but as a link
>lrwxr-xr-x 1 root admin 67 May 23 22:32 /opt/local/bin/pip-2.7 -> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/pip
>Which means that the standard utility will be used.

No, I think that means it uses the MacPorts one. Note: /opt/local vs 
/usr/local.

>The things is that depending on a way I run pip I get different results:
>$ pip list|grep pep8
>pep8 (1.7.0)
>$ sudo pip list|grep pep8
>$
>pep8 was installed through macports.
>In second case pip is using stripped environment and pointing to standard Mac OS Python repository.
>But in a way to install anything with pip I have to use sudo.
>In my profile I have variable PYTHONPATH:
>PYTHONPATH=/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
>It is pointing to macports structure. But when I use sudo (in case of using pip) it get stripped.
>How to setup and maintain python environment in a trustful way? So it is clear 
>where all installed modules are?

My personal habit is to use virtualenv. You could build a virtualenv based of 
the system Python or the MacPorts one (or make one of each). Then you can use 
pip (as yourself, no sudo - avoid that if possible) from the appropriate 
environment to install into that environment. Complete separation, and complete 
control for you.

The executables inside a virtualenv ("python", "pip" etc) are stubs that adjust 
PYTHONPATH etc themselves and then invoke the python one which that particular 
virtualenv was based. This means that by executing that _specific_ executable 
you automatically and correctly use that specific virtualenv. Without having to 
hand maintain your own $PYTHONPATH, and therefore with needing to adjust it 
depending which setup you want to use.

Cheers,
Cameron Simpson <cs at zip.com.au>



More information about the Python-list mailing list