Eggs in path before PYTHONPATH environment variable

前端 未结 3 1187
长情又很酷
长情又很酷 2020-12-28 18:08

If I have packages installed from easy_install, the eggs are prepended to sys.path before the items in the PYTHONPATH variable.

Fo

3条回答
  •  粉色の甜心
    2020-12-28 18:46

    Unfortunately this is done with a hard-coded template deep inside setuptools/command/easy_install.py. You could create a patched setuptools with an edited template, but I've found no clean way to extend easy_install from the outside.

    Each time easy_install runs it will regenerate the file easy_install.pth. Here is a quick script which you can run after easy_install, to remove the header and footer from easy_install.pth. You could create a wrapper shell script to run this immediately after easy_install:

    #!/usr/bin/env python
    import sys
    path = sys.argv[1]
    lines = open(path, 'rb').readlines()
    if lines and 'import sys' in lines[0]:
        open(path, 'wb').write(''.join(lines[1:-1]) + '\n')
    

    Example:

    % easy_install gdata
    % PYTHONPATH=xyz python -c 'import sys; print sys.path[:2]'
    ['', '/Users/pat/virt/lib/python2.6/site-packages/gdata-2.0.14-py2.6.egg']
    
    % ./fix_path ~/virt/lib/python2.6/site-packages/easy_install.pth
    % PYTHONPATH=xyz python -c 'import sys; print sys.path[:2]'
    ['', '/Users/pat/xyz']
    

    For more clarification, here is the format of easy-install.pth:

    import sys; sys.__plen = len(sys.path)
    ./gdata-2.0.14-py2.6.egg
    import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)
    

    The two import sys lines are the culprit causing the eggs to appear at the start of the path. My script just removes those sys.path-munging lines.

提交回复
热议问题