Restaure PYTHONPATH después de instalar setup.py con PYTHONPATH

Restaure PYTHONPATH después de instalar setup.py con PYTHONPATH

Ejecuté este comando en Ubuntu 14.04 Linux mientras intentaba instalar un paquete:

export PYTHONPATH=/usr/local/lib/python2.7/ && sudo python setup.py install

El paquete que estaba intentando instalar eshttp://github.com/ewels/MultiQC

Luego, muchas cosas relacionadas con Python han salido mal desde esto. Por ejemplo, virtualenv ya no funciona y este paquete tampoco funciona:

http://wiki.dnanexus.com/images/files/dx-toolkit-v0.240.1-ubuntu-14.04-amd64.tar.gz

source Downloads/dx-toolkit/environment
dx login
Traceback (most recent call last):
  File "/home/avilella/Downloads/dx-toolkit/bin/dx", line 7, in <module>
    from dxpy.scripts.dx import main
  File "/home/avilella/Downloads/dx-toolkit/share/dnanexus/lib/python2.7/site-packages/dxpy/__init__.py", line 143, in <module>
    from . import exceptions
  File "/home/avilella/Downloads/dx-toolkit/share/dnanexus/lib/python2.7/site-packages/dxpy/exceptions.py", line 211, in <module>
    network_exceptions = (requests.packages.urllib3.exceptions.ProtocolError,
AttributeError: 'module' object has no attribute 'packages'

¿Cómo vuelvo esto al escenario antes de ejecutar esta línea de comandos? Incluso comenzando desde una terminal bash nueva, ahora no encontrará ninguna de mis otras bibliotecas de Python. Incluso con un usuario de Linux recién creado en la misma computadora, los errores son los mismos.

La pregunta relacionada no fue respondida:Arreglando una variable de entorno PYTHONPATH rota

[EDITAR]

No sé cómo volver a la lista de carpetas anterior, pero supongo que era una combinación de /usr/lib/python2.7 y /usr/local/lib/python2.7

Probar virtualenv también falla ahora:

virtualenv
Fatal Python error: Py_Initialize: Unable to get the locale encoding
  File "/usr/lib/python2.7/encodings/__init__.py", line 123
    raise CodecRegistryError,\
                            ^
SyntaxError: invalid syntax
Aborted (core dumped)

Python interactivo funciona en la medida que probé a continuación:

avilella@ubuntu14:~$ python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "foo"
foo
>>> import urllib3
>>> 

Ahora revisé la carpeta y probé ambas pip instally apt-get install python-${package}con esto:

ls /usr/local/lib/python2.7/dist-packages/*/ | grep -v egg | grep '\:' | tr ':' ' ' | grep -v dist-info | xargs -n1 basename  | while read i; do sudo pip install $i; done

También:

ls /usr/local/lib/python2.7/dist-packages/*/ | grep -v egg | grep '\:' | tr ':' ' ' | grep -v dist-info | xargs -n1 basename  | while read i; do sudo apt-get install -y python-${i}; done

Pero siguen siendo los mismos problemas.

Las solicitudes de paquetes están ahí:

ls -l /usr/lib/python2.7/dist-packages/requests/
total 304
-rw-r--r-- 1 root root 14594 Mar 26  2015 adapters.py
-rw-rw-r-- 1 root root 13750 Sep  4 16:05 adapters.pyc
-rw-r--r-- 1 root root  4333 Sep 24  2013 api.py
-rw-rw-r-- 1 root root  5261 Sep  4 16:05 api.pyc
-rw-r--r-- 1 root root  6173 Dec  5  2013 auth.py
-rw-rw-r-- 1 root root  7206 Sep  4 16:05 auth.pyc
-rw-r--r-- 1 root root   527 Mar 26  2015 certs.py
-rw-rw-r-- 1 root root   736 Sep  4 16:05 certs.pyc
-rw-r--r-- 1 root root  2531 Mar 26  2015 compat.py
-rw-rw-r-- 1 root root  2541 Sep  4 16:05 compat.pyc
-rw-r--r-- 1 root root 16686 Jan  8  2014 cookies.py
-rw-rw-r-- 1 root root 20167 Sep  4 16:05 cookies.pyc
-rw-r--r-- 1 root root  1599 Mar 26  2015 exceptions.py
-rw-rw-r-- 1 root root  3863 Sep  4 16:05 exceptions.pyc
-rw-r--r-- 1 root root   820 Sep 24  2013 hooks.py
-rw-rw-r-- 1 root root  1055 Sep  4 16:05 hooks.pyc
-rw-r--r-- 1 root root  1846 Mar 26  2015 __init__.py
-rw-rw-r-- 1 root root  2501 Sep  4 16:05 __init__.pyc
-rw-r--r-- 1 root root 25332 Mar 26  2015 models.py
-rw-rw-r-- 1 root root 23051 Sep  4 16:05 models.pyc
-rw-r--r-- 1 root root 22042 Mar 26  2015 sessions.py
-rw-rw-r-- 1 root root 18049 Sep  4 16:05 sessions.pyc
-rw-r--r-- 1 root root  3136 Sep 24  2013 status_codes.py
-rw-rw-r-- 1 root root  4439 Sep  4 16:05 status_codes.pyc
-rw-r--r-- 1 root root  3575 Sep 24  2013 structures.py
-rw-rw-r-- 1 root root  6359 Sep  4 16:05 structures.pyc
-rw-r--r-- 1 root root 19642 Mar 26  2015 utils.py
-rw-rw-r-- 1 root root 19386 Sep  4 16:05 utils.pyc

Revisé una versión funcional de una máquina virtual diferente que tengo, donde todo lo relacionado con Python funciona y la carpeta de solicitudes contieneexactamentelos mismos archivos.

Cualquier mención a urllib en Linux que no funciona (abajo) es la misma que en el que funciona (más abajo), con 2 archivos que cambian su fecha entre uno y otro:

[       4096 Sep  4 16:05]  /usr/lib/python2.7/dist-packages/urllib3
[       3346 Sep  4 16:05]  /usr/lib/python2.7/dist-packages/urllib3/_collections.pyc
[      22000 Sep  4 16:05]  /usr/lib/python2.7/dist-packages/urllib3/connectionpool.pyc
[       4096 Sep  4 16:05]  /usr/lib/python2.7/dist-packages/urllib3/contrib
[       6015 Sep  4 16:05]  /usr/lib/python2.7/dist-packages/urllib3/exceptions.pyc
[       6511 Sep  4 16:05]  /usr/lib/python2.7/dist-packages/urllib3/fields.pyc
[       3162 Sep  4 16:05]  /usr/lib/python2.7/dist-packages/urllib3/filepost.pyc
[       2074 Sep  4 16:05]  /usr/lib/python2.7/dist-packages/urllib3/__init__.pyc
[       4096 Sep  4 16:05]  /usr/lib/python2.7/dist-packages/urllib3/packages
[       9076 Sep  4 16:05]  /usr/lib/python2.7/dist-packages/urllib3/poolmanager.pyc
[       5850 Sep  4 16:05]  /usr/lib/python2.7/dist-packages/urllib3/request.pyc
[       9879 Sep  4 16:05]  /usr/lib/python2.7/dist-packages/urllib3/response.pyc
[      19662 Sep  4 16:05]  /usr/lib/python2.7/dist-packages/urllib3/util.pyc
[      28639 Oct 12  2015]  /usr/lib/python2.7/dist-packages/urllib3/connectionpool.py
[       5961 Oct 12  2015]  /usr/lib/python2.7/dist-packages/urllib3/fields.py
[       2486 Oct 12  2015]  /usr/lib/python2.7/dist-packages/urllib3/filepost.py
[      10159 Oct 12  2015]  /usr/lib/python2.7/dist-packages/urllib3/response.py
[      20575 Oct 12  2015]  /usr/lib/python2.7/dist-packages/urllib3/util.py
[       1703 Sep 25  2013]  /usr/lib/python2.7/dist-packages/urllib3/__init__.py
[       3274 Sep 25  2013]  /usr/lib/python2.7/dist-packages/urllib3/exceptions.py
[       2898 Aug 14  2013]  /usr/lib/python2.7/dist-packages/urllib3/_collections.py
[       9009 Aug 14  2013]  /usr/lib/python2.7/dist-packages/urllib3/poolmanager.py
[       5874 Aug 14  2013]  /usr/lib/python2.7/dist-packages/urllib3/request.py
[      17079 Oct 12  2015]  /usr/lib/python2.7/dist-packages/urllib3-1.7.1.egg-info
[       7142 Oct  5 14:47]  /usr/lib/python2.7/lib2to3/fixes/fix_urllib.pyc
[       8385 Oct 26  2016]  /usr/lib/python2.7/lib2to3/fixes/fix_urllib.py
[      46549 Oct  5 14:47]  /usr/lib/python2.7/urllib2.pyc
[      50626 Oct  5 14:47]  /usr/lib/python2.7/urllib.pyc
[      51788 Oct 26  2016]  /usr/lib/python2.7/urllib2.py
[      59371 Oct 26  2016]  /usr/lib/python2.7/urllib.py

El que funciona a continuación:

[       4096 Jul 10  9:06]  /usr/lib/python2.7/dist-packages/urllib3
[       3346 Jul 10  9:06]  /usr/lib/python2.7/dist-packages/urllib3/_collections.pyc
[      22000 Jul 10  9:06]  /usr/lib/python2.7/dist-packages/urllib3/connectionpool.pyc
[       4096 Jul 10  9:06]  /usr/lib/python2.7/dist-packages/urllib3/contrib
[       6015 Jul 10  9:06]  /usr/lib/python2.7/dist-packages/urllib3/exceptions.pyc
[       6511 Jul 10  9:06]  /usr/lib/python2.7/dist-packages/urllib3/fields.pyc
[       3162 Jul 10  9:06]  /usr/lib/python2.7/dist-packages/urllib3/filepost.pyc
[       2074 Jul 10  9:06]  /usr/lib/python2.7/dist-packages/urllib3/__init__.pyc
[       4096 Jul 10  9:06]  /usr/lib/python2.7/dist-packages/urllib3/packages
[       9076 Jul 10  9:06]  /usr/lib/python2.7/dist-packages/urllib3/poolmanager.pyc
[       5850 Jul 10  9:06]  /usr/lib/python2.7/dist-packages/urllib3/request.pyc
[       9879 Jul 10  9:06]  /usr/lib/python2.7/dist-packages/urllib3/response.pyc
[      19662 Jul 10  9:06]  /usr/lib/python2.7/dist-packages/urllib3/util.pyc
[      28639 Oct 12  2015]  /usr/lib/python2.7/dist-packages/urllib3/connectionpool.py
[       5961 Oct 12  2015]  /usr/lib/python2.7/dist-packages/urllib3/fields.py
[       2486 Oct 12  2015]  /usr/lib/python2.7/dist-packages/urllib3/filepost.py
[      10159 Oct 12  2015]  /usr/lib/python2.7/dist-packages/urllib3/response.py
[      20575 Oct 12  2015]  /usr/lib/python2.7/dist-packages/urllib3/util.py
[       1703 Sep 25  2013]  /usr/lib/python2.7/dist-packages/urllib3/__init__.py
[       3274 Sep 25  2013]  /usr/lib/python2.7/dist-packages/urllib3/exceptions.py
[       2898 Aug 14  2013]  /usr/lib/python2.7/dist-packages/urllib3/_collections.py
[       9009 Aug 14  2013]  /usr/lib/python2.7/dist-packages/urllib3/poolmanager.py
[       5874 Aug 14  2013]  /usr/lib/python2.7/dist-packages/urllib3/request.py
[      17079 Oct 12  2015]  /usr/lib/python2.7/dist-packages/urllib3-1.7.1.egg-info
[      46549 Jul 12 11:47]  /usr/lib/python2.7/urllib2.pyc
[      50626 Jul 12 11:47]  /usr/lib/python2.7/urllib.pyc
[       7142 Jul 12 11:47]  /usr/lib/python2.7/lib2to3/fixes/fix_urllib.pyc
[       8385 Oct 26  2016]  /usr/lib/python2.7/lib2to3/fixes/fix_urllib.py
[      51788 Oct 26  2016]  /usr/lib/python2.7/urllib2.py
[      59371 Oct 26  2016]  /usr/lib/python2.7/urllib.py

Otra herramienta de ejemplo que ya no funciona estosheets https://github.com/kren1/tosheets:

tosheets
Traceback (most recent call last):
  File "/usr/local/bin/tosheets", line 7, in <module>
    from tosheets.tosheets import main
  File "/usr/local/lib/python2.7/dist-packages/tosheets/tosheets.py", line 27, in <module>
    from apiclient import discovery
ImportError: cannot import name discovery

Después de hacer unset PYTHON, entonces:

>>> import sys
>>> sys.path
['', '/usr/local/lib/python2.7/dist-packages/multiqc-1.4dev-py2.7.egg', '/usr/lib/python2.7/dist-packages', '/usr/lib/pymodules/python2.7', '/home/avilella/Downloads/dx-toolkit/share/dnanexus/lib/python2.7/site-packages', '/home/avilella/Downloads/dx-toolkit/lib/python', '/home/avilella', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/avilella/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']

PYTHON desarmado, el python3:

>>> import sys
>>> sys.path
['', '/home/avilella/Downloads/dx-toolkit/share/dnanexus/lib/python2.7/site-packages', '/home/avilella/Downloads/dx-toolkit/lib/python', '/home/avilella', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']

El contenido de $PYTHONPATH antes de realizar cualquier fuente está vacío.

El contenido de Downloads/dx-toolkit/environmentse encuentra a continuación:

# -*- Mode: shell-script -*-                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
#                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
# Copyright (C) 2013-2016 DNAnexus, Inc.                                                                                                                                                                                                                                                                                                                                                                                                                                                       
#                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
# This file is part of dx-toolkit (DNAnexus platform client libraries).                                                                                                                                                                                                                                                                                                                                                                                                                        
#                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
#   Licensed under the Apache License, Version 2.0 (the "License"); you may not                                                                                                                                                                                                                                                                                                                                                                                                                
#   use this file except in compliance with the License. You may obtain a copy                                                                                                                                                                                                                                                                                                                                                                                                                 
#   of the License at                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
#                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
#       http://www.apache.org/licenses/LICENSE-2.0                                                                                                                                                                                                                                                                                                                                                                                                                                             
#                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
#   Unless required by applicable law or agreed to in writing, software                                                                                                                                                                                                                                                                                                                                                                                                                        
#   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT                                                                                                                                                                                                                                                                                                                                                                                                                  
#   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the                                                                                                                                                                                                                                                                                                                                                                                                                   
#   License for the specific language governing permissions and limitations                                                                                                                                                                                                                                                                                                                                                                                                                    
#   under the License.                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
#                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
#                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
# Source this file in a bash shell to initialize DNAnexus environment                                                                                                                                                                                                                                                                                                                                                                                                                          
# variables:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
# $ source environment                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

# This line is compatible with both bash and csh/tcsh. If running in csh, it sources the file "environment.csh" and quits.                                                                                                                                                                                                                                                                                                                                                                     

test ! -z "$version" && echo "$shell" | grep -q csh && set SOURCE=`echo $_ | cut -f 2 -d " "` && set SOURCE=`dirname "$SOURCE"` && source "$SOURCE/environment.csh" && exit

# Resolve the location of this file                                                                                                                                                                                                                                                                                                                                                                                                                                                            
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done

# Get RHEL version                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
if [ -e /etc/redhat-release ] ; then
  RHEL_MAJOR_VERSION=$(grep -o "Red Hat Enterprise Linux .* release [0-9]\+" /etc/redhat-release | sed -e "s/Red Hat Enterprise Linux .* release //")
fi

export DNANEXUS_HOME="$( cd -P "$( dirname "$SOURCE" )" && pwd )"

# Detect system installation of dx-toolkit                                                                                                                                                                                                                                                                                                                                                                                                                                                     
if [ "$DNANEXUS_HOME" == "/etc/profile.d" ]; then

  export DNANEXUS_HOME="/usr/share/dnanexus"
  # Private Python packages. We really ought not pollute PYTHONPATH with these though.                                                                                                                                                                                                                                                                                                                                                                                                         
  export PYTHONPATH="/usr/share/dnanexus/lib/python2.7/site-packages:$PYTHONPATH"
  export CLASSPATH="/usr/share/java/dnanexus-api-0.1.0.jar:${CLASSPATH}"

else

  export PATH="${DNANEXUS_HOME}/bin:$PATH"
  export CLASSPATH="${DNANEXUS_HOME}/lib/java/*:${CLASSPATH}"

  if [ "$RHEL_MAJOR_VERSION" == "7" ]; then
    export PYTHONPATH="${DNANEXUS_HOME}/share/dnanexus/lib/python2.7/site-packages:${DNANEXUS_HOME}/lib64/python2.7/site-packages:$PYTHONPATH"
  else
    export PYTHONPATH="${DNANEXUS_HOME}/share/dnanexus/lib/python2.7/site-packages:${DNANEXUS_HOME}/lib/python:$PYTHONPATH"
  fi

fi

# Note: The default I/O stream encoding in Python 2.7 (as configured on ubuntu) is ascii, not UTF-8 or the system locale                                                                                                                                                                                                                                                                                                                                                                       
# encoding. We reset it here to avoid having to set it for every I/O operation explicitly.                                                                                                                                                                                                                                                                                                                                                                                                     
export PYTHONIOENCODING=UTF-8

eval "$(register-python-argcomplete dx|sed 's/-o default//')"

# Clean up old session files                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
(shopt -s nullglob;
 if [[ $HOME != "" ]]; then
     for session_dir in "${HOME}/.dnanexus_config/sessions/"*; do
         if ! ps -p $(basename "$session_dir") &> /dev/null; then
             rm -rf "$session_dir"
         fi
     done
 fi
)

if [[ -z "$DX_SECURITY_CONTEXT" && -n "$DX_AUTH_TOKEN" ]]; then
    export DX_SECURITY_CONTEXT="{\"auth_token_type\":\"Bearer\",\"auth_token\":\"$DX_AUTH_TOKEN\"}"
fi

Tengo una máquina virtual Ubuntu 14.04 similar funcionando, ¿sería posible sincronizar ciertas carpetas con ella para que Ubuntu 14.04 que no funciona vuelva a la normalidad?

Parece que estoy estancado en este punto y no sé cómo seguir adelante.

Respuesta1

El developmodo de setup.py vinculará la ruta de su código local a PYTHONPATH.

Si instala el paquete local mediante python setup.py develop , esto alterará el sistema PYTHONPATHy lo volverá loco al eliminarlo de las variables de entorno.

Encuentro una manera correcta de desinstalarlos y restaurar su valor predeterminado PYTHONPATHdesdeaquí. Necesita utilizar la opción --uninstallo -upara desarrollar, es decir:

python setup.py develop --uninstall

PD: si no puede desinstalar el paquete la primera vez, intente reinstalarlo y desinstalarlo nuevamente.

Respuesta2

Descubrí que la única solución es reinstalar el sistema operativo desde cero.

información relacionada