Próbuję wdrożyć pakiet Pythona pip
w środowisku wirtualnym na maszynie Ubuntu, ale napotykam problem związany z uprawnieniami. Na przykład:
(TestVirtualEnv)test@testServer:~$ pip install markdown2
kończy się:
błąd: nie można utworzyć '/home/test/virtualenvs/TestVirtualEnv/lib/python3.3/site-packages/markdown2.py': Odmowa uprawnień
Nie mogę sudo
, ponieważ zainstaluje pakiet globalnie, a nie w środowisku wirtualnym. I chown
ed site-packages
; ls
tylko pokazuje katalogi związane easy_install
, pip
i setuptools
, i nic związane z promocji cenowych.
Jak wdrożyć pakiet w środowisku wirtualnym pip
bez napotkania błędów związanych z uprawnieniami?
python
virtualenv
pip
Arseni Mourzenko
źródło
źródło
sudo
?sudo
.sudo
. Rzeczywiście, pakiet instaluje się teraz poprawnie. Czy możesz promować swój komentarz jako odpowiedź, abym mógł go zaakceptować?virtualenv
katalogu (lub mavirtualenv
prawo do zapisu) , ponieważ możesz aktywować go z innym użytkownikiem, ale nie pozwoli ci to zainstalować żadnych pakietów i da uprawnienia dostępu.Odpowiedzi:
virtualenv
Problemy z uprawnieniami mogą wystąpić podczas tworzeniavirtualenv
as,sudo
a następnie działania bezsudo
wvirtualenv
.Jak dowiedziałeś się w komentarzu do pytania, rozwiązaniem jest tutaj utworzenie strony
virtualenv
bez,sudo
aby móc w niej pracować (zwłaszcza pisać) bezsudo
.źródło
virtualenv
bez sudo?sudo
, zobacz odpowiedź @vingtoft, aby dowiedzieć się, jak łatwo to naprawić bez ponownego tworzeniaRozwiązanie:
Jeśli utworzyłeś virtualenv jako root, uruchom następujące polecenie:
To prawdopodobnie rozwiąże Twój problem.
Twoje zdrowie
źródło
W moim przypadku
mkvirtualenv
używałem, ale nie powiedziałem, że będę używał python3. Mam ten błąd:mkvirtualenv hug pip3 install hug -U .... error: could not create '/usr/lib/python3.4/site-packages': Permission denied
Zadziałało po określeniu python3:
źródło
Nie stworzyłem swojego virtualenv za pomocą sudo. Więc odpowiedź Sebastiana mnie nie dotyczyła. Mój projekt nazywa się
utils
. Sprawdziłemutils
katalog i zobaczyłem to:-rw-r--r-- 1 macuser staff 983 6 Jan 15:17 README.md drwxr-xr-x 6 root staff 204 6 Jan 14:36 utils.egg-info -rw-r--r-- 1 macuser staff 31 6 Jan 15:09 requirements.txt
Jak widać,
utils.egg-info
jest własnościąroot
niemacuser
. Dlatego dawało mi topermission denied
błąd. Musiałem też usunąć,/Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.egg-link
ponieważ został stworzony przezroot
. Zrobiłem topip install -e .
ponownie po usunięciu tych i zadziałało.źródło
Jeśli utworzyłeś środowisko wirtualne za pomocą roota, użyj tego polecenia
da ci dostęp do roota, a następnie aktywuje twoje wirtualne środowisko za jego pomocą
źródło
Nie aktywowano środowiska wirtualnego przed użyciem pip.
Wypróbuj z:
Następnie użyj pip -r Requirements.txt w swoim głównym folderze
źródło
Zdarzyło mi się to również (przez przypadek) po utworzeniu nowego venv w istniejącym środowisku wirtualnym. prostym sposobem na zdiagnozowanie tego byłoby sprawdzenie, gdzie
python
jest dowiązanie symboliczne, tj. uruchomienie:i upewnij się, że wskazuje odpowiedni plik binarny Pythona. W przypadku większości systemów będzie to
/usr/bin/python
lub/usr/bin/python3
. podczas gdy jeśli wskazuje na istniejące środowisko wirtualne, będzie to coś podobnego/home/youruser/somedir/bin/python
. jeśli to drugie, to sugerowałbym odtworzenie venv, upewniając się, że nie jesteś „wewnątrz” żadnego istniejącego virtualenv (tj. uruchomdeactivate
)źródło
Podczas tworzenia virtualenv, jeśli używasz sudo, katalog jest tworzony z uprawnieniami roota, więc gdy spróbujesz zainstalować pakiet z użytkownikiem innym niż sudo, nie będziesz mieć uprawnień do instalacji w nim. Dlatego zawsze twórz virtualenv bez sudo i instaluj bez sudo.
Możesz także skopiować pakiety zainstalowane w globalnym języku Python do virtualenv.
źródło