Telkens wanneer ik sys.path.append
gebruik, wordt de nieuwe map toegevoegd. Zodra ik python sluit, keert de lijst echter terug naar de vorige (standaard?) Waarden. Hoe voeg ik permanent een map toe aan PYTHONPATH
?
Antwoord 1, autoriteit 100%
Je moet je nieuwe map toevoegen aan de omgevingsvariabele PYTHONPATH
, gescheiden door een dubbele punt van de vorige inhoud daarvan. In elke vorm van Unix kun je dat doen in een opstartscript dat geschikt is voor de shell die je gebruikt (.profile
of wat dan ook, afhankelijk van je favoriete shell) met een commando dat, opnieuw, afhangt van de schaal in kwestie; in Windows kunt u dit doen via de systeem-GUI voor dit doel.
superuser.com
is misschien een betere plaats om verder te vragen, bijvoorbeeld voor meer details als je details nodig hebt over hoe je een omgevingsvariabele in het door jou gekozen platform en shell kunt verrijken, aangezien het niet echt een programmering is vraag per se.
Antwoord 2, autoriteit 91%
Als je bash gebruikt (op een Mac of GNU/Linux-distro), voeg je dit toe aan je ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
Antwoord 3, autoriteit 65%
In plaats van PYTHONPATH
te manipuleren, kun je ook een padconfiguratiebestandmaken. Zoek eerst uit in welke directory Python deze informatie zoekt:
python -m site --user-site
Om de een of andere reden lijkt dit niet te werken in Python 2.7. Daar kun je gebruiken:
python -c 'import site; site._script()' --user-site
Maak vervolgens een .pth
Bestand in die map met het pad dat u wilt toevoegen (maak de map als deze niet bestaat).
Bijvoorbeeld:
# find directory
SITEDIR=$(python -m site --user-site)
# create if it doesn't exist
mkdir -p "$SITEDIR"
# create new .pth file with our path
echo "$HOME/foo/bar" > "$SITEDIR/somelib.pth"
Antwoord 4, Autoriteit 37%
Dit werkt op Windows
- op Windows, met Python 2.7 Ga naar de map Python Setup.
- Open lib / site-pakketten.
- voeg een example.pth lege bestand toe aan deze map.
- Voeg het vereiste pad toe aan het bestand, één per elke regel.
Dan kunt u alle modules in die paden van uw scripts zien.
Antwoord 5, Autoriteit 19%
Als iemand nog steeds in de war is – als u op een Mac bent, doet u het volgende:
- Open terminal
- Type
open .bash_profile
- In het tekstbestand dat verschijnt, voegt u deze regel aan het einde toe:
export PYTHONPATH=$PYTHONPATH:foo/bar
- Sla het bestand op, start de terminal opnieuw op en u bent klaar
Antwoord 6, Autoriteit 15%
U kunt het pad via uw Pythonrc-bestand toevoegen, dat standaard is op ~ / .pythonrc op Linux. dwz.
import sys
sys.path.append('/path/to/dir')
U kunt ook de PYTHONPATH
Milieuvariabele instellen, in een Globaal RC-bestand, zoals ~/.profile
op Mac of Linux of via Configuratiescherm – & GT; Systeem – & GT; Geavanceerd tab – & GT; Milieuvariabelen op Windows.
Antwoord 7, Autoriteit 11%
Om wat meer uitleg te geven, construeert Python automatisch zijn zoekpaden (zoals hierbovenen hier) met behulp van het site.py
-script (meestal in sys.prefix + lib/python<version>/site-packages
evenals lib/site-python
). Men kan de waarde van sys.prefix verkrijgen:
python -c 'import sys; print(sys.prefix)'
Het script site.py voegt dan een aantal mappen toe, afhankelijk van het platform, zoals /usr/{lib,share}/python<version>/dist-packages
, /usr/local/lib/python<version>/dist-packages
naar het zoekpad en ookzoekt deze paden voor <package>.pth
config bestanden die specifieke aanvullende zoekpaden bevatten. Bijvoorbeeld easy-installonderhoudt zijn verzameling geïnstalleerde pakketten die zijn toegevoegd aan een systeemspecifiek bestand, bijvoorbeeld op Ubuntu is het /usr/local/lib/python2.7/dist-packages/easy-install.pth
. Op een typisch systeem zijn er een aantal van deze .pth-bestanden die een aantal onverwachte paden in sys.path kunnen verklaren:
python -c 'import sys; print(sys.path)'
Je kunt dus een .pth-bestand maken en in een van deze mappen plaatsen (inclusief de sitedir zoals hierboven) . Dit lijkt de manier te zijn waarop de meeste pakketten aan het sys.path worden toegevoegd in plaats van het PYTHONPATH te gebruiken.
Opmerking: op OSX is er een speciaal extra zoekpad toegevoegd door site.py voor ‘framework builds’ (maar lijkt te werken voor normaal gebruik van python op de opdrachtregel): /Library/Python/<version>/site-packages
(bijv. voor Python2.7: /Library/Python/2.7/site-packages/
), waar pakketten van derden moeten worden geïnstalleerd (zie de README daarin richt). Dus men kan daar een padconfiguratiebestand toevoegen dat extra zoekpaden bevat, b.v. maak een bestand aan met de naam /Library/Python/2.7/site-packages/pip-usr-local.pth
dat /usr/local/lib/python2.7/site-packages/
en dan zal de systeempython dat zoekpad toevoegen.
Antwoord 8, autoriteit 7%
Op linux kun je een symbolische link maken van je pakket naar een directory van de PYTHONPATH zonder dat je met omgevingsvariabelen te maken hebt. Iets als:
ln -s /your/path /usr/lib/pymodules/python2.7/
Antwoord 9, autoriteit 7%
Voor mij werkte het toen ik het bestand .bash_profile
veranderde. Alleen het wijzigen van het .bashrc
-bestand werkte alleen totdat ik de shell opnieuw startte.
Voor python 2.7 zou het er als volgt uit moeten zien:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
aan het einde van het bestand .bash_profile
.
Antwoord 10, autoriteit 7%
Op MacOS, in plaats van een pad naar een specifieke bibliotheek te geven. Volledig pad geven naar de hoofdprojectmap in
~/.bash_profile
maakte mijn dag goed, bijvoorbeeld:
export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"
doe hierna:
source ~/.bash_profile
Antwoord 11, autoriteit 5%
Het toevoegen van export PYTHONPATH="${PYTHONPATH}:/my/other/path"
aan de ~/.bashrc werkt mogelijk niet als PYTHONPATH
momenteel niet bestaat ( vanwege de :
).
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
Het bovenstaande toevoegen aan mijn ~/.bashrc deed de truc voor mij op Ubuntu 16.04
Antwoord 12, autoriteit 4%
Om awesomo’s antwoord toe te voegen, je kunt die regel ook toevoegen aan je ~/.bash_profile
of ~/.profile
Antwoord 13, autoriteit 3%
Dit is een update van deze thread die enkele oude antwoorden bevat.
Voor degenen die MAC-OS Catalina of een nieuwere versie (>= 10.15) gebruiken, is er een nieuwe Terminal geïntroduceerd met de naam zsh
(een vervanging voor de oude bash
) .
Ik had wat problemen met de bovenstaande antwoorden als gevolg van deze wijziging, en ik deed enigszins een tijdelijke oplossing door het bestand ~/.zshrc
te maken en de bestandsdirectory te plakken in de $PATH
en $PYTHONPATH
Dus ik deed eerst:
nano ~/.zshrc
Toen de editor werd geopend, plakte ik de volgende inhoud:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
heeft het opgeslagen en de terminal opnieuw opgestart.
BELANGRIJK:Het bovenstaande pad is ingesteld op het pad van mijn computer, je zou het moeten aanpassen aan je python.
Antwoord 14, autoriteit 3%
Het onderstaande script werkt op alle platforms omdat het pure Python is. Het maakt gebruik van het pathlib-pad, dat hier is gedocumenteerd https://docs.python.org/ 3/library/pathlib.html, om het platformoverschrijdend te laten werken. Je voert het één keer uit, herstart de kernel en dat is het. Geïnspireerd door https://medium .com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574. Om het uit te voeren zijn beheerdersrechten vereist, aangezien u enkele systeembestanden wijzigt.
from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path
if str(to_add) not in path:
minLen=999999
for index,directory in enumerate(path):
if 'site-packages' in directory and len(directory)<=minLen:
minLen=len(directory)
stpi=index
pathSitePckgs=Path(path[stpi])
with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
pth_file.write(str(to_add))
Antwoord 15, autoriteit 2%
Het toevoegen van een nieuw pad aan PYTHONPATH gebeurt handmatig door:
het pad toevoegen aan je ~/.bashrc-profiel, in terminal door:
vim ~/.bashrc
plak het volgende in je profiel
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
Zorg er dan voor dat u uw bashrc-profiel gebruikt wanneer u uw code in terminal uitvoert:
source ~/.bashrc
Hopelijk helpt dit.
Antwoord 16
Ik heb permanent toegevoegd in Windows Vista, Python 3.5
Systeem > Configuratiescherm > Geavanceerde systeeminstellingen > Geavanceerd (tik) Omgevingsvariabelen > Systeemvariabelen > (als u PYTHONPATH niet ziet in de kolom Variabele) (klik) Nieuw > Variabelenaam: PYTHONPATH > Variabele waarde:
Schrijf de directory in de variabelewaarde. Het zijn details van het antwoord van Blue Peppers.
Antwoord 17
In Python 3.6.4 kun je sys.path over python-sessies als volgt volhouden:
import sys
import os
print(str(sys.path))
dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")
root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")
sys.path.insert(0, root_dir)
print(str(sys.path))
Ik raad je ten zeerste aan virtualenv en virtualenvwrapper te gebruiken, anders wordt je pad onoverzichtelijk
Antwoord 18
Problemen met Python-pad oplossen wanneer u overschakelt van bash naar zsh
Ik kwam Python Path-problemen tegen toen ik overschakelde naar zshvanuit bash.
De oplossing was eenvoudig, maar ik heb het niet opgemerkt.
Pip liet me zien dat de scriptsblah blah
of pakketblah blah
is geïnstalleerd in ~/.local/bin
die niet in padis.
Na het lezen van enkele oplossingen voor deze vraag, opende ik mijn .zshrc
om te ontdekken dat de oplossing al bestond.
Ik moest gewoon een opmerking verwijderen uit een regel:
Kijk eens
Antwoord 19
Geïnspireerd door andrei-deusteanu antwoord, hier is mijn versie. Dit stelt je in staat om een aantal extra paden te creëren in je site-packages directory.
import os
# Add paths here. Then Run this block of code once and restart kernel. Paths should now be set.
paths_of_directories_to_add = [r'C:\GIT\project1', r'C:\GIT\project2', r'C:\GIT\project3']
# Find your site-packages directory
pathSitePckgs = os.path.join(os.path.dirname(os.__file__), 'site-packages')
# Write a .pth file in your site-packages directory
pthFile = os.path.join(pathSitePckgs,'current_machine_paths.pth')
with open(pthFile,'w') as pth_file:
pth_file.write('\n'.join(paths_of_directories_to_add))
print(pthFile)
Antwoord 20
Kortste pad tussen A <-> B is een rechte lijn;
import sys
if not 'NEW_PATH' in sys.path:
sys.path += ['NEW_PATH']