W swojej aplikacji chciałbym użyć:
packageA
, co wymagapackageX==1.3
packageB
, co wymagapackageX==1.4
packageX==1.5
Jak mogę zainstalować wiele wersji programu packageX
z pip, aby poradzić sobie w tej sytuacji?
W swojej aplikacji chciałbym użyć:
packageA
, co wymaga packageX==1.3
packageB
, co wymaga packageX==1.4
packageX==1.5
Jak mogę zainstalować wiele wersji programu packageX
z pip, aby poradzić sobie w tej sytuacji?
packageX>=1.3,<2
i packageX>=1.4,<2
(zakładając, że zewnętrzny pakiet X podąża za wersjonowaniem semantycznym ), wtedy ty jako deweloper aplikacji niższego szczebla nie miałbyś problemu z przypięciem i użyciem packageX==1.5
i wszyscy byliby zadowoleni. Więcej szczegółów tutaj
Odpowiedzi:
pip nie pomoże ci w tym.
Możesz nakazać mu zainstalowanie określonej wersji, ale zastąpi ona inną. Z drugiej strony, użycie dwóch virtualenvów pozwoli ci zainstalować obie wersje na tym samym komputerze, ale nie będziesz ich używać w tym samym czasie.
Najlepiej jest zainstalować obie wersje ręcznie, umieszczając je w ścieżce Pythona pod inną nazwą.
Ale jeśli twoje dwie biblioteki oczekują, że będą miały tę samą nazwę (a powinny), będziesz musiał je zmodyfikować, aby wybierały wersję, której potrzebują, z pewnym aliasem importu, takim jak:
import dependencyname_version as dependencyname
Obecnie nie ma na to prostego sposobu. Możesz mieć nadzieję, że ten hack zadziała.
Wolałbym porzucić jedną z dwóch bibliotek i zastąpić ją odpowiednikiem lub załatać ją, aby zaakceptowała nową wersję zależności i zwróciła poprawkę społeczności.
Pobierz źródło dla ea. pakiet. Zainstaluj każdy w osobnym folderze. Na przykład. Miałem pakiet w wersji 1.10, ale chciałem przełączyć się na wersję deweloperską, aby trochę popracować. Pobrałem źródła dla modułu dev:
git clone https://github.com/networkx/networkx.git
cd netwokrx
Stworzyłem folder dla tej wersji:
mkdir /home/username/opt/python
, a następnie ustawić PYTHONPATH env var do: export PYTHONPATH=/home/username/opt/python/lib/python2.7/site-packages/
. Następnie zainstalowałem go za pomocą:python setup.py install --prefix=/home/username/opt/python
Teraz, ponieważ moja PYTHONPATH wskazuje teraz na ten inny folder pakietów witryn, kiedy uruchamiam Pythona w wierszu poleceń i importuję nowy moduł, działa. Aby przełączyć się z powrotem, usuń nowy folder z PYTHONPATH.
>>> import networkx as nx
>>> nx.__version__
'2.0.dev_20151209221101'
networkx
różnicami wersji!
sys.path