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.
답변
업데이트 된 답변
이를 수행하는 더 좋은 방법은 다음과 같습니다.
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를 사용하여 PyPI 또는 다른 대체 소스 (예 :
pip install http://some.site/package-name.zip
또는 다른 아카이브 유형) 에서 설치할 때 . - 설치시 수동으로 사용
python setup.py install
. - 시스템 저장소에서 설치할 때
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
답변
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")
답변
터미널에서 확인을 받으려면 다음을 실행할 수 있습니다.
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
답변
이 답변 의 확장으로 :
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 패키지에는 차이가 있습니다. 패키지에는 여러 모듈이 포함될 수 있으며 모듈 이름이 패키지 이름과 일치하지 않을 수 있습니다.
답변
명령 프롬프트 유형을 엽니 다.
pip3 list