[英]What exactly should be set in PYTHONPATH?
我正在為 Python 項目的其他開發人員編寫安裝文檔,並且我一直在閱讀PYTHONPATH
環境變量。 我正在查看我當前的開發系統,並認為我有一些設置錯誤導致我的 IDE (IntelliJ) 在查找 python 庫時行為不正確。
我已經查看了此處和此處的文檔,但我仍然不確定PYTHONPATH
環境變量中的實際內容。
我讓PYTHONHOME
指向了 `C:\\Python27'。
我當前的PYTHONPATH
設置為PYTHONHOME
。 我還應該從sys.path
添加目錄嗎?
更新:
根據以下信息,不需要設置PYTHONPATH
,除非您希望 python 默認能夠找到非標准庫。 例如,當我從安裝程序安裝wxPython時,它會將其庫添加到PYTHONPATH
。 我確實將PYTHONHOME
設置為 python 安裝的根目錄,以便我可以將它添加到我的系統PATH
環境變量中,以便我可以從任何地方運行 python。
您不必設置其中任何一個。 可以將PYTHONPATH設置為指向其中包含私有庫的其他目錄。 如果未設置PYTHONHOME,則Python默認使用找到python.exe的目錄,因此dir應位於PATH中。
對於大多數安裝,您不應設置這些變量,因為Python不需要它們運行。 Python知道在哪里可以找到它的標准庫。
設置PYTHONPATH的唯一原因是維護您不想在全局默認位置(即site-packages
目錄)中安裝的自定義Python庫的目錄。
請務必閱讀: http : //docs.python.org/using/cmdline.html#environment-variables
這是我學到的:PYTHONPATH是一個添加到Python導入搜索路徑“sys.path”的目錄,它由當前目錄組成。 CWD,PYTHONPATH,標准和共享庫以及客戶庫。 例如:
% python3 -c "import sys;print(sys.path)"
['',
'/home/username/Documents/DjangoTutorial/mySite',
'/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
其中第一條路徑''表示當前目錄。第二條路徑是via
%export PYTHONPATH=/home/username/Documents/DjangoTutorial/mySite
可以添加到〜/ .bashrc中以使其永久化,其余的是Python標准和動態共享庫以及第三方庫,如django。
如上所述,不要亂用PYTHONHOME,即使將其設置為''或'None'也會導致python3 shell停止工作:
% export PYTHONHOME=''
% python3
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'
Current thread 0x00007f18a44ff740 (most recent call first):
Aborted (core dumped)
請注意,如果啟動Python腳本,CWD將成為腳本的目錄。 例如:
username@bud:~/Documents/DjangoTutorial% python3 mySite/manage.py runserver
==== Printing sys.path ====
/home/username/Documents/DjangoTutorial/mySite # CWD is where manage.py resides
/usr/lib/python3.6
/usr/lib/python3.6/lib-dynload
/usr/local/lib/python3.6/dist-packages
/usr/lib/python3/dist-packages
您還可以在運行時追加sys.path的路徑:假設您在〜/ Documents / Python目錄中有一個文件Fibonacci.py:
username@bud:~/Documents/DjangoTutorial% python3
>>> sys.path.append("/home/username/Documents")
>>> print(sys.path)
['', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages',
'/home/username/Documents']
>>> from Python import Fibonacci as fibo
或通過
% PYTHONPATH=/home/username/Documents:$PYTHONPATH
% python3
>>> print(sys.path)
['',
'/home/username/Documents', '/home/username/Documents/DjangoTutorial/mySite',
'/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']
>>> from Python import Fibonacci as fibo
使用帶有pip
命令的標志-e
存在比直接操作PYTHONPATH
少一點的“臨時”解決方案,並允許無縫安裝可以導入的本地庫,並重新導入以反映所做的更改。
為了能夠像import mypackage
任何其他模塊一樣import mypackage
,正確的方法是在本地使用 pip:
python -m pip install -e /path_to_package/mypackage/
python -m
確保您使用的是當前使用的同一個python
安裝中的 pip 包。
-e
使其可編輯,i/e import mypackage
將在您進行一些更改后重新加載,而不是使用緩存的。
mypackage
必須是可安裝的軟件包,I / E包含一個__init__.py
文件,和一個基本setup.py
(或pyproject.toml
用於文件pipenv
)
最小設置setup.py
from setuptools import find_packages, setup
setup(
name='mypackage', # Required
version='0.0.1', # Required
packages=find_packages(), # Required
)
包結構必須是這樣的:
mypackage/
setup.py
mypackage/ <----- this is a folder inside the other `mypackage/` folder
__init__.py
或作為一棵樹:
└── python_perso folder
└── mypackage folder
├── mypackage folder
│ └── __init__.py
└── setup.py
[編輯] 安裝后,目錄將如下所示:
(對於名為mypackage
的包)
└── python_perso
└── mypackage
├── mypackage
│ ├── __init__.py
│ └── __pycache__
│ └── __init__.cpython-38.pyc
├── mypackage.egg-info
│ ├── PKG-INFO
│ ├── SOURCES.txt
│ ├── dependency_links.txt
│ └── top_level.txt
└── setup.py
5 directories, 7 files
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.