Python 패키지가 설치되어 있는지 확인합니다.
파이썬 스크립트 내에서 패키지가 설치되어 있는지 확인하는 좋은 방법은 무엇입니까?통역사가 보기에는 쉽겠지만, 대본 내에서 해야 합니다.
설치 중에 생성된 디렉터리가 시스템에 있는지 확인할 수 있을 것 같은데, 더 좋은 방법이 있을 것 같습니다.Skype4Py 패키지가 설치되어 있는지 확인 중이며, 설치되어 있지 않으면 설치하겠습니다.
검사를 완료하기 위한 나의 아이디어.
- 일반적인 설치 경로에서 디렉터리 확인
- 패키지를 가져오려고 시도하고 예외가 발생한 경우 패키지를 설치합니다.
파이썬 스크립트를 의미하는 경우 다음과 같은 작업을 수행합니다.
Python 3.3+는 sys.modules와 find_spec을 사용합니다.
import importlib.util
import sys
# For illustrative purposes.
name = 'itertools'
if name in sys.modules:
print(f"{name!r} already in sys.modules")
elif (spec := importlib.util.find_spec(name)) is not None:
# If you choose to perform the actual import ...
module = importlib.util.module_from_spec(spec)
sys.modules[name] = module
spec.loader.exec_module(module)
print(f"{name!r} has been imported")
else:
print(f"can't find the {name!r} module")
파이썬 3:
try:
import mymodule
except ImportError as e:
pass # module doesn't exist, deal with it.
파이썬 2:
try:
import mymodule
except ImportError, e:
pass # module doesn't exist, deal with it.
Python 3.3부터는 find_spec() 메서드를 사용할 수 있습니다.
import importlib.util
# For illustrative purposes.
package_name = 'pandas'
spec = importlib.util.find_spec(package_name)
if spec is None:
print(package_name +" is not installed")
업데이트된 답변
더 나은 방법은 다음과 같습니다.
import subprocess
import sys
reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze'])
installed_packages = [r.decode().split('==')[0] for r in reqs.split()]
결과:
print(installed_packages)
[
"Django",
"six",
"requests",
]
여부 확인requests
설치됨:
if 'requests' in installed_packages:
# Do something
왜 이쪽입니까?때때로 앱 이름 충돌이 발생합니다.앱 네임스페이스에서 가져오면 시스템에 설치된 항목의 전체 그림을 볼 수 없습니다.
제안된 솔루션은 다음과 같이 작동합니다.
- 또는 소스: Pip사 를여 또는대 예
pip install http://some.site/package-name.zip
또는 다른 보관 유형). - 를 사용하여 하는 경우
python setup.py install
. - 할 때 를 들어, " 템스리리에설때치할서들어토예포를지시,들", "▁when예어를ing▁system때▁from▁like▁repos▁install,itories리토"와 같이
sudo apt install python-requests
.
작동하지 않을 수 있는 경우:
- 모드에서 할 때, 를 들어, 개모드에설때들, 어를예서.
python setup.py develop
. - 모드에서 할 때, 를 들어, 개모드에설때들, 어를예서.
pip install -e /path/to/package/source/
.
구답
더 나은 방법은 다음과 같습니다.
import pip
installed_packages = pip.get_installed_distributions()
pip>=10.x의 경우:
from pip._internal.utils.misc import get_installed_distributions
왜 이쪽입니까?때때로 앱 이름 충돌이 발생합니다.앱 네임스페이스에서 가져오면 시스템에 설치된 항목의 전체 그림을 볼 수 없습니다.
결과적으로 다음 목록을 얻을 수 있습니다.pkg_resources.Distribution
하십시오.다음을 예로 참조하십시오.
print installed_packages
[
"Django 1.6.4 (/path-to-your-env/lib/python2.7/site-packages)",
"six 1.6.1 (/path-to-your-env/lib/python2.7/site-packages)",
"requests 2.5.0 (/path-to-your-env/lib/python2.7/site-packages)",
]
목록을 작성합니다.
flat_installed_packages = [package.project_name for package in installed_packages]
[
"Django",
"six",
"requests",
]
여부 확인requests
설치됨:
if 'requests' in flat_installed_packages:
# Do something
만약 당신이 터미널에서 수표를 받고 싶다면, 당신은 실행할 수 있습니다.
pip3 show package_name
아무것도 반환되지 않으면 패키지가 설치되지 않습니다.
예를 들어 이 검사를 자동화하여 누락된 경우 설치할 수 있도록 하려면 bash 스크립트에 다음을 포함할 수 있습니다.
pip3 show package_name 1>/dev/null #pip for Python 2
if [ $? == 0 ]; then
echo "Installed" #Replace with your actions
else
echo "Not Installed" #Replace with your actions, 'pip3 install --upgrade package_name' ?
fi
명령 프롬프트 유형 열기
pip3 list
터미널 유형
pip show some_package_name
예
pip show matplotlib
2, Python 2.*의 경우,pip show <package_name>
동일한 작업을 수행합니다.
를 들어 를들면입니다.pip show numpy
다음을 반환하거나 유사하게 반환합니다.
Name: numpy
Version: 1.11.1
Summary: NumPy: array processing for numbers, strings, records, and objects.
Home-page: http://www.numpy.org
Author: NumPy Developers
Author-email: numpy-discussion@scipy.org
License: BSD
Location: /home/***/anaconda2/lib/python2.7/site-packages
Requires:
Required-by: smop, pandas, tables, spectrum, seaborn, patsy, odo, numpy-stl, numba, nfft, netCDF4, MDAnalysis, matplotlib, h5py, GridDataFormats, dynd, datashape, Bottleneck, blaze, astropy
setuptools에서 pkg_resources 모듈을 사용할 수 있습니다.예:
import pkg_resources
package_name = 'cool_package'
try:
cool_package_dist_info = pkg_resources.get_distribution(package_name)
except pkg_resources.DistributionNotFound:
print('{} not installed'.format(package_name))
else:
print(cool_package_dist_info)
python 모듈과 python 패키지 사이에는 차이점이 있습니다.패키지에 여러 모듈이 포함될 수 있으며 모듈 이름이 패키지 이름과 일치하지 않을 수 있습니다.
if pip list | grep -q \^'PACKAGENAME\s'
# installed ...
else
# not installed ...
fi
방법 1
날씨를 검색하려면 패키지가 존재하거나 pip3 list 명령을 사용하지 않습니다.
#**pip3 list** will display all the packages and **grep** command will search for a particular package
pip3 list | grep your_package_name_here
방법 2
가져오기 오류를 사용할 수 있습니다.
try:
import your_package_name
except ImportError as error:
print(error,':( not found')
방법 3
!pip install your_package_name
import your_package_name
...
...
다음을 사용할 수 있습니다.
class myError(exception):
pass # Or do some thing like this.
try:
import mymodule
except ImportError as e:
raise myError("error was occurred")
저는 이 주제에 저의 생각/결과를 추가하고 싶습니다.저는 맞춤형 프로그램에 대한 모든 요구 사항을 확인하는 스크립트를 작성하고 있습니다.파이썬 모듈에도 많은 검사가 있습니다.
약간의 문제가 있습니다.
try:
import ..
except:
..
해결책제 경우에는 파이썬 모듈 중 하나가python-nmap
하지만 당신은 그것을 수입합니다.import nmap
보시다시피 이름이 일치하지 않습니다.따라서 위 솔루션을 사용한 테스트는 False 결과를 반환하고 적중 시 모듈도 가져오지만 간단한 테스트/체크를 위해 많은 메모리를 사용할 필요는 없습니다.
나는 또한 그것을 발견했습니다.
import pip
installed_packages = pip.get_installed_distributions()
installed_packages
패키지만 pip와 함께 설치됩니다.내 시스템에서pip freeze
에 대한 이익.40
모듈, 반면에 Python 듈모,installed_packages
.1
수동으로 설치한 것(파이톤-nmap).
아래의 다른 솔루션은 질문과 관련이 없을 수도 있지만 테스트 기능을 설치를 수행하는 솔루션과는 별도로 유지하는 것이 유용할 수 있습니다.
나에게 효과가 있었던 해결책.이 답변을 기반으로 하는 파이썬 모듈을 가져오지 않고 존재하는지 확인하는 방법
from imp import find_module
def checkPythonmod(mod):
try:
op = find_module(mod)
return True
except ImportError:
return False
이수 .python-nmap
나도 사용해야 합니다.nmap
이 경우 모듈이 메모리에 로드되지 않습니다.
저는 to @ice.ni cer 답변에 대해 코멘트하고 싶지만, 답변할 수 없어서...대시가 있는 패키지는 @dwich 주석이 지적한 점뿐만 아니라 밑줄로 저장됩니다.
를 들어,은 들어당, 은신를을 .pip3 install sphinx-rtd-theme
그러나:
importlib.util.find_spec(sphinx_rtd_theme)
합니다.importlib.util.find_spec(sphinx-rtd-theme)
없음을 반환합니다.importlib.util.find_spec(sphinx.rtd.theme)
ModuleNotFoundError는 모듈을 찾을 수 없습니다.
게다가, 몇몇 이름들은 완전히 바뀌었습니다.를 들어,은 들어당, 은신를을 .pip3 install pyyaml
하지만 그것은 간단히 저장됩니다.yaml
저는 python3.8을 사용하고 있습니다.
스크립트에서 누락된 패키지를 설치하고 계속하려면 다음과 같은 작업을 수행할 수 있습니다(예: 'python-krbV' 패키지의 'krbV' 모듈).
import pip
import sys
for m, pkg in [('krbV', 'python-krbV')]:
try:
setattr(sys.modules[__name__], m, __import__(m))
except ImportError:
pip.main(['install', pkg])
setattr(sys.modules[__name__], m, __import__(m))
간단한 방법은 python 명령줄 도구를 사용하는 것입니다.단순형import <your module name>
모듈이 누락된 경우 오류가 표시됩니다.
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
>>> import sys
>>> import jocker
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named jocker
$
음...가장 편리한 답변은 명령줄을 사용하여 가져오기를 시도한 것입니다.하지만 저는 심지어 그것을 피하는 것을 선호합니다.
'pip freeze | grep pkname'은 어떻습니까?저는 그것을 시도했고 그것은 잘 작동합니다.또한 버전이 있는 버전과 버전 제어(설치)로 설치되어 있는지 또는 편집 가능(개발)으로 설치되어 있는지도 표시합니다.
나는 항상 pylibcheck를 사용하여 lib가 설치되어 있는지 여부를 확인하고, 간단하게 다운로드합니다.pip install pylibcheck
그리고 그는 이렇게 될 수 있습니다.
import pylibcheck
if not pylibcheck.checkPackage("mypackage"):
#not installed
또한 튜플과 목록을 지원하므로 여러 패키지를 확인하고 설치 여부를 확인할 수 있습니다.
import pylibcheck
packages = ["package1", "package2", "package3"]
if pylibcheck.checkPackage(packages):
#not installed
만약 당신이 그것을 원한다면 당신은 그것과 함께 립스를 설치할 수 있습니다, 당신이 공식 파이피를 확인하는 것을 추천합니다.
다음과 같은 기술을 사용하는 투표된 최고의 솔루션importlib.util.find_spec
그리고.sys.modules
그리고 가져오기 예외를 잡는 것은 대부분의 패키지에 대해 작동하지만 일부 에지 경우에는 실패합니다.beautifulsoup
package) 수입품에 사용되는 패키지 이름이 다소 다른 경우(bs4
이 경우)는 설치 파일 구성에 사용되는 것보다 많습니다.이러한 에지 사례의 경우 가져오기에 사용된 패키지 이름 대신 사용된 패키지 이름을 전달하지 않으면 이 솔루션이 작동하지 않습니다.requirements.txt
또는pip
설비
나의 사용 사례를 위해, 나는 설치된 패키지를 확인하는 패키지 체커를 작성해야 했습니다.requirements.txt
그래서 이 해결책은 효과가 없었습니다.결국 제가 사용하게 된 것은.subprocess.check
패키지 설치를 확인하기 위해 명시적으로 pip 모듈을 호출합니다.
import subprocess
for pkg in packages:
try:
subprocess.check_output('py -m pip show ' + pkg)
except subprocess.CalledProcessError as ex:
not_found.append(pkg)
다른 방법보다 조금 느리지만 안정적이고 엣지 케이스를 처리합니다.
2번 옵션으로 이동합니다.한다면ImportError
되지 않음).sys.path
).
아래에 주어진 스니펫을 사용할 수 있는 기회가 있습니까?이 코드를 실행하면 "모듈 팬더가 설치되지 않았습니다"가 반환됩니다.
a = "pandas"
try:
import a
print("module ",a," is installed")
except ModuleNotFoundError:
print("module ",a," is not installed")
그러나 아래에 주어진 코드를 실행하면:
try:
import pandas
print("module is installed")
except ModuleNotFoundError:
print("module is not installed")
"모듈 팬더가 설치되었습니다"를 반환합니다.
그들 사이의 차이점은 무엇입니까?
언급URL : https://stackoverflow.com/questions/1051254/check-if-python-package-is-installed
'your programing' 카테고리의 다른 글
리눅스 기반 서버에서 ASP.Net 실행 (0) | 2023.06.11 |
---|---|
서명된 정수 산술 오버플로를 정의되지 않은 상태로 유지하는 것을 정당화할 수 있는 의미 있는 통계 데이터가 있습니까? (0) | 2023.06.11 |
sprintf가 있는 패딩 (0) | 2023.06.11 |
특정 열에 특정 문자열이 포함된 판다 데이터 프레임에서 행을 삭제하는 방법은 무엇입니까? (0) | 2023.06.11 |
///의 의미는 무엇입니까? (0) | 2023.06.11 |