La radice del problema sono spesso gli script obsoleti nella sottodirectory bin(Linux) o Scripts(Windows). Spiegherò questo usando il problema che ho riscontrato come esempio.
Avevo installato virtualenv versione 1.10 nei miei pacchetti del sito dell'utente (il fatto che sia nei pacchetti del sito dell'utente e non nei pacchetti del sito di sistema è irrilevante qui)
pdobrogost@host:~$ which virtualenv
/home/users/pdobrogost/.local/bin/virtualenv
pdobrogost@host:~$ virtualenv --version
1.10
Dopo averlo aggiornato alla versione 1.11 ho ricevuto il seguente errore:
pdobrogost@host:~$ virtualenv --version
Traceback (most recent call last):
File "/home/users/pdobrogost/.local/bin/virtualenv", line 5, in <module>
from pkg_resources import load_entry_point
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2701, in <module>
return self.__dep_map
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 572, in resolve
if insert:
pkg_resources.DistributionNotFound: virtualenv==1.10
Il file /home/users/pdobrogost/.local/bin/virtualenvmenzionato nel messaggio di errore era simile al seguente:
#!/opt/python/2.7.5/bin/python2.7
# EASY-INSTALL-ENTRY-SCRIPT: 'virtualenv==1.10','console_scripts','virtualenv'
__requires__ = 'virtualenv==1.10'
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.exit(
load_entry_point('virtualenv==1.10', 'console_scripts', 'virtualenv')()
)
Lì, vediamo che lo virtualenvscript non è stato aggiornato e richiede ancora la versione 1.10 precedentemente installata di virtualenv.
Ora, reinstallando virtualenv in questo modo
pdobrogost@host:~$ pip install --user --upgrade virtualenv
Downloading/unpacking virtualenv from https://pypi.python.org/packages/py27/v/virtualenv/virtualenv-1.11.1-py27-none-any.whl#md5=265770b61de41d34d2e9fdfddcdf034c
Using download cache from /home/users/pdobrogost/.pip_download_cache/https%3A%2F%2Fpypi.python.org%2Fpackages%2Fpy27%2Fv%2Fvirtualenv%2Fvirtualenv-1.11.1-py27-none-any.whl
Installing collected packages: virtualenv
Successfully installed virtualenv
Cleaning up...
non aiuta (nessuno dei due pip install --user --upgrade --force-reinstall virtualenv) perché lo script /home/users/pdobrogost/.local/bin/virtualenvrimane invariato.
L'unico modo per risolvere il problema era rimuovere manualmente gli script virtualenv * dalla /home/users/pdobrogost/.local/bin/cartella e installare nuovamente virtualenv. Successivamente, gli script appena generati fanno riferimento alla versione corretta del pacchetto:
pdobrogost@host:~$ virtualenv --version
1.11