Permanent een map toevoegen aan PYTHONPATH?

Telkens wanneer ik sys.path.appendgebruik, 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 (.profileof 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.comis 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 PYTHONPATHte 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 .pthBestand 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

  1. op Windows, met Python 2.7 Ga naar de map Python Setup.
  2. Open lib / site-pakketten.
  3. voeg een example.pth lege bestand toe aan deze map.
  4. 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:

  1. Open terminal
  2. Type open .bash_profile
  3. In het tekstbestand dat verschijnt, voegt u deze regel aan het einde toe:
    export PYTHONPATH=$PYTHONPATH:foo/bar
  4. 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 PYTHONPATHMilieuvariabele instellen, in een Globaal RC-bestand, zoals ~/.profileop 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-packagesevenals 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-packagesnaar het zoekpad en ookzoekt deze paden voor <package>.pthconfig 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.pthdat /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_profileveranderde. 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 PYTHONPATHmomenteel 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_profileof ~/.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 ~/.zshrcte maken en de bestandsdirectory te plakken in de $PATHen $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 blahof pakketblah blahis geïnstalleerd in ~/.local/bindie niet in padis.

Na het lezen van enkele oplossingen voor deze vraag, opende ik mijn .zshrcom 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']

Other episodes