2015-12-29 17 views
14

Próbuję utworzyć wirtualne środowisko przy użyciu virtualenv na Mac OS X El Capitan. Zainstalowałem Python 2.7.11 z brew, który domyślnie zawiera pip, wheel i setuptools.virtualenv nie obejmuje pip

Hovewer, gdy próbuję zainstalować virtualenv następujące instrukcje w documentation lub z jakiegokolwiek innego źródła, mam kilka problemów:

  1. virtualenv wykonywalny nie jest umieszczona w /usr/local/bin po pip robi swoje zadanie, więc trzeba do ln -s ręcznie (może to oznaczać, że coś jest nie tak z instalacją na tym etapie).
  2. Po biegnę virtualenv venv, tworzy nowe środowisko, łapie Python 2.7.11 z brew -installation, ale: nie ma pip wewnątrz bin folderu. Oznacza to, że jeśli spróbuję aktywować which pip, po aktywowaniu venv, to zwróci globalną pozycję pip - /usr/local/bin/pip, a nie /path/to/venv/bin/pip.

W konsekwencji, instalowanie pakietów wewnątrz venv wykorzystuje globalny pip i instaluje je do globalnego sites-packages, że nie wewnątrz venv, a wręcz przeciwnie, co środowisko powinien robić.

Czy możesz zasugerować, co może być nie tak i jak to naprawić?

EDYCJA: Należy wspomnieć, że na moim komputerze były zainstalowane inne wersje Pythona, które ostatnio usunąłem, ponieważ jest to opisane in this answer. Może to powoduje problem i potrzebne jest bardziej dokładne czyszczenie.

+0

Czy używałeś 'sudo' podczas instalowania' virtualenv'? Może w jakiś sposób został zainstalowany jako pakiet prywatno-prywatny i to powoduje problemy. (Podobnie jak nie mając gdziekolwiek plików binarnych są umieszczane podczas tej instalacji na 'PATH' itp.) – millimoose

+0

@millimoose Próbowałem obu bez' sudo', a wraz z nim wynik jest taki sam. Jest mało prawdopodobne, aby problem przywilejów, ponieważ możliwe jest użycie 'virtualenv.py' [lokalnie ze źródła] (https://virtualenv.pypa.io/en/latest/installation.html). Użycie 'virtualenv.py' z tarballa również niewiarygodnie nie przesyła' pip'. – mikeonly

Odpowiedz

9

Spróbuj usunąć lub zmienić nazwę pliku .pydistutils.cfg w swoim katalogu domowym, np. zmieniając nazwę na mv ~/.pydistutils.cfg ~/oldpydistutils.cfg

Zamieszczam szczegółową odpowiedź tutaj, aby pomóc innym, ale pierwotny kredyt trafia do this answer. Jeśli wiesz, co konkretnie w .pydistutils.cfg było przyczyną problemu, daj mi znać!

Miałem ten sam problem: moje środowiska wirtualne zostały utworzone bez lokalnej kopii pip, mimo że miały lokalną kopię Pythona. Oznaczało to, że używanie $ pip z poziomu środowiska wirtualnego zainstalowanego w lokalizacji globalnego pakietu i nie było widoczne dla pythona środowiska.

Jak zdiagnozowano to na moim komputerze:

  1. tworzę virtualenvironment z $ virtualenv env
  2. aktywował wirtualnego środowiska z $ source env/bin/activate
  3. sprawdzone położenie python: uruchom (env)$ which python z wyjściem /Users/<username>/env/bin/python (zgodnie z oczekiwaniami)
  4. Sprawdzone położenie pip: uruchom (env)$ which pip z wyjściem /usr/local/bin/pip (NIE Oczekiwano)

Aby sprawdzić, gdzie nasze pakunki dzieje, możemy spróbować zainstalować pakiet w środowisku wirtualnym:

  1. próby zainstalowania pakietu: (env)$ pip install HTTPServer który powiedzie
  2. Spróbuj uruchomić pakiet: (env)$ python -m HTTPServer który kończy się niepowodzeniem z błędem /Users/emunsing/env/bin/python: No module named HTTPServer
  3. dokładnie sprawdzić, spróbuj ponownie zainstalować: (env)$ pip install HTTPServer która produkuje Requirement already satisfied (use --upgrade to upgrade): HTTPServer in /usr/local/lib/python2.7/site-packages

podwójnej kontroli, widzimy, że nie ma Pip w folderze/bin środowiska za:

$ ls env/bin activate activate.fish python python2 activate.csh activate_this.py python-config python2.7

I tak, podczas gdy system stwierdzi lokalnej wersji Pythona, nie może znaleźć lokalnego pip używania i trawersy $ PATH. Kończyło się to używaniem pip z/usr/local/bin, przez co nie mogłem zainstalować pakietów lokalnie w środowisku wirtualnym.

Oto, co starałem: - Ponowna pytona brew uninstall python następnie brew upgrade i brew install python --build-from-source - instalacja pip using the get-pip.py command as described in the Pip documentation

Oto co wykluczone: - Ja nie używałem sudo pip ...which caused similar problems in this other question i nie zrobiły na dowolny czas instalacji Python/pip - Moje środowisko wirtualne nie pokazuje lokalnej instalacji pip, jak miało to miejsce w przypadku podobnych pytań: This one for Windows, This one for Mac OS X.

Ostatecznie odkryłem, że wyeliminowanie pliku ~/.pydistutils.cfg rozwiązało problem, umożliwiając tworzenie nowych środowisk wirtualnych, które miały własne lokalne pipsy.Zawartość mojego pliku ~/.pydistutils.cfg były:

[global] 
verbose=1 

[install] 
install-scripts=$HOME/bin 

[easy_install] 
install-scripts=$HOME/bin 

prostu zmiana nazwy pliku ~/.pydistutils.cfg wydaje się rozwiązać problem: wydaje się, że chociaż ten plik został utworzony przez homebrew instalacji, some settings in this file may be incompatible with virtualenv. Podczas usuwania tego pliku nie wystąpiły żadne złe efekty w moim systemie, może być konieczne użycie flagi --user podczas instalowania pakietów z pip do środowiska globalnego (np. $ pip install --user HTTPServer). Tutaj jest więcej details on .pydistutils.cfg, jeśli chcesz pracować nad dostosowaniem go do swoich potrzeb.

+0

Dzięki za dokładną odpowiedź! Chciałem tylko powiedzieć, że nie mogę potwierdzić odpowiedzi, ponieważ nie doświadczam już wspomnianego problemu. Mam nowy komputer i na szczęście nie mogę tego odtworzyć. Jeśli jednak ktoś może potwierdzić, że to rozwiązanie działa, z przyjemnością zatwierdzę twoją odpowiedź. – mikeonly

+0

To jest absolutnie poprawne. Usunąłem plik ~/.pydistutils.cfg i wszystkie moje problemy zostały rozwiązane. Dziękuję za podsumowanie wielu informacji w jednej odpowiedzi. – carlosdc

+0

Nie mogę znaleźć pliku '.pydistutils.cfg', użyłem' locate .pydistutils.cfg', ale nie mogłem go znaleźć, ten sam błąd i debugowanie pokazuje te same problemy. Każde inne rozwiązanie. System: Ubuntu – Vaulstein

0
  1. virtualenv wykonywalny nie jest umieszczona w /usr/local/bin po pip robi swoje zadanie, więc muszę ln -s to ręcznie (może to oznaczać, że coś jest nie tak z instalacją na tym etapie).

Nie rób tego. To tylko ukryje błąd i nie rozwiąże problemu. Oto krótki przewodnik jak do debugowania tego rodzaju zagadnień:

  • zaczynać się which -a python. Pierwsza ścieżka, którą zobaczysz, powinna być /usr/local/bin/python, jeśli nie, sprawdź zmienną PATH.

  • Następnie sprawdź which -a pip. Ponownie pierwszą ścieżką powinna być /usr/local/bin/pip. Jeśli nie, uruchom python -m ensurepip i ponownie sprawdź.

  • Teraz zainstaluj virtualenv używając pip install virtualenv, następnie sprawdź wyjście which -a virtualenv. Pierwsza ścieżka powinna być /usr/local/bin/virtualenv, jeśli nie sprawdź wyjścia env |grep PYTHON dla nieoczekiwanych zmiennych środowiskowych.

  • Na koniec sprawdź wyjście virtualenv --version, aby upewnić się, że masz najnowszą wersję.

+0

Podwójnie sprawdziłem wszystko, co powiedziałeś. Wszystko wskazuje na '/ usr/local/bin/...' first, a także 'virtualenv', który jest w wersji 13.1.2. 'env' nie pokazuje niczego związanego z' Pythonem', chociaż w rzeczywistości wygląda jak problem z zmiennymi środowiskowymi. Gdziekolwiek indziej szukać? – mikeonly

+0

Czy usunąłeś dowiązanie symboliczne, które wcześniej stworzyłeś? Czy możesz ponownie zainstalować 'virtualenv' i dodać dane wyjściowe z' pip', a także dane wyjściowe z 'virtualenv' podczas tworzenia nowego venv. Możesz także wydrukować polecenia, których używasz do aktywacji 'venv' i' echo $ PATH' po aktywowaniu venv. – cel

+0

Dowiązanie symboliczne jest tworzone tylko wtedy, gdy używam opcji '--isolated', powoduje to, że' pip' poprawnie generuje 'virtualenv' w'/usr/local/bin'. Użycie tego 'virtualenv' nadal nie daje' pip' w stworzonym 'venv'. Oto wynik: http://pastebin.com/BbG8Ytap – mikeonly

Powiązane problemy