코드 내에 Python 모듈을 설치하는 방법은 무엇입니까?
PyPI에서 패키지를 스크립트에 직접 설치해야 합니다.
혹시 모듈이나distutils
(distribute
,pip
, 등) 기능을 사용하면 다음과 같은 기능을 실행할 수 있습니다.pypi.install('requests')
요청이 가상환경에 설치됩니까?
스크립트에서 패키지를 설치하는 공식 권장 방법은 하위 프로세스를 통해 pip 명령줄 인터페이스를 호출하는 것입니다.이 밖에 대부분의 답변은 pip에서 지원되지 않습니다.게다가 pip v10 이후, 모든 코드는pip._internal
사용자에게 pip을 프로그래밍 방식으로 사용할 수 없다는 것을 명확히 하기 위해.
사용하다sys.executable
같은 전화를 할 수 있도록 하기 위해pip
현재 런타임에 관련되어 있습니다.
import subprocess
import sys
def install(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
다음과 같은 것도 사용할 수 있습니다.
import pip
def install(package):
if hasattr(pip, 'main'):
pip.main(['install', package])
else:
pip._internal.main(['install', package])
# Example
if __name__ == '__main__':
install('argh')
사용하고 싶은 경우pip
필요한 패키지를 설치하고 설치 후 가져오려면 다음 코드를 사용할 수 있습니다.
def install_and_import(package):
import importlib
try:
importlib.import_module(package)
except ImportError:
import pip
pip.main(['install', package])
finally:
globals()[package] = importlib.import_module(package)
install_and_import('transliterate')
패키지를 사용자로 설치한 경우 패키지를 가져올 수 없다는 문제가 발생할 수 있습니다.자세한 내용은 sys.path를 새로 고치는 방법을 참조하십시오.
이 조작은 유효합니다.
import subprocess
def install(name):
subprocess.call(['pip', 'install', name])
나는 애런의 대답에 몇 가지 예외적인 처리를 추가했다.
import subprocess
import sys
try:
import pandas as pd
except ImportError:
subprocess.check_call([sys.executable, "-m", "pip", "install", 'pandas'])
finally:
import pandas as pd
여러 패키지를 설치하려면setup.py
다음 코드를 가진 파일:
import sys
import subprocess
import pkg_resources
required = {'numpy', 'pandas', '<etc>'}
installed = {pkg.key for pkg in pkg_resources.working_set}
missing = required - installed
if missing:
# implement pip as a subprocess:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', *missing])
용도:
import os
os.system('pip install requests')
Docker 파일을 변경하지 않고 임시 해결을 위해 위와 같이 시도했습니다.
보다 효율적인 답변을 원하는 경우subprocess.check_call
먼저 다음을 사용하여 요구 사항이 이미 충족되었는지 확인할 수 있습니다.pkg_resources
.
이는 다양한 요건 지정자에 적합합니다.예.,>=
,==
:
import sys
import subprocess
import pkg_resources
from pkg_resources import DistributionNotFound, VersionConflict
def should_install_requirement(requirement):
should_install = False
try:
pkg_resources.require(requirement)
except (DistributionNotFound, VersionConflict):
should_install = True
return should_install
def install_packages(requirement_list):
try:
requirements = [
requirement
for requirement in requirement_list
if should_install_requirement(requirement)
]
if len(requirements) > 0:
subprocess.check_call([sys.executable, "-m", "pip", "install", *requirements])
else:
print("Requirements already satisfied.")
except Exception as e:
print(e)
사용 예:
requirement_list = ['requests', 'httpx==0.18.2']
install_packages(requirement_list)
관련 정보:스택 오버플로 질문: 58612272
"install_install" 옵션을 사용하여 자체 패키지의 setup.py 내에서 종속 모듈을 정의합니다.
패키지에 콘솔스크립트가 생성되어야 하는 경우 "console_scripts" 엔트리 포인트를 사용하여 "bin" 폴더 내에 배치되는 래퍼 스크립트를 생성할 수 있습니다(virtualenv 환경의 경우 등).
정확한 버전의 여러 패키지를 조건부로 설치하기 위해 @Tanmay Shrivastava의 답변을 바탕으로 다음 패턴을 사용하고 있습니다.
import sys
from subprocess import run, PIPE, STDOUT
import pkg_resources
def run_cmd(cmd):
ps = run(cmd, stdout=PIPE, stderr=STDOUT, shell=True, text=True)
print(ps.stdout)
# packages to be conditionally installed with exact version
required = {"click==8.0.1", "semver==3.0.0.dev2"}
installed = {f"{pkg.key}=={pkg.version}" for pkg in pkg_resources.working_set}
missing = required - installed
if missing:
run_cmd(f'pip install --ignore-installed {" ".join([*missing])}')
import pip
try:
import imaplib
import email
import pandas as pd
# for hiding password
from pathlib import Path
from dotenv import load_dotenv
import os
import requests
#
from collections import defaultdict
from itertools import permutations,combinations
except Exception as e:
print(e)
e = str(e).split(' ')[-1].replace("'","")
pip.main(['install', e])
아래를 시험해 보세요.지금까지는 그게 제일 잘 먹혔어요.
먼저 4개를 설치한 후 "필수" 목록에 새 것을 언급합니다.
import pkg_resources
import subprocess
import sys
import os
REQUIRED = {
'spacy', 'scikit-learn', 'numpy', 'pandas', 'torch',
'pyfunctional', 'textblob', 'seaborn', 'matplotlib'
}
installed = {pkg.key for pkg in pkg_resources.working_set}
missing = REQUIRED - installed
if missing:
python = sys.executable
subprocess.check_call([python, '-m', 'pip', 'install', *missing], stdout=subprocess.DEVNULL)
언급URL : https://stackoverflow.com/questions/12332975/how-can-i-install-a-python-module-within-code
'programing' 카테고리의 다른 글
SQL Server DateTime 데이터 유형에서 날짜만 반환하는 방법 (0) | 2023.04.14 |
---|---|
Windows 명령줄에서 폴더 크기 가져오기 (0) | 2023.04.14 |
Objective-C에서 여러 파라미터를 전달하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
부트스트랩3과 수직 정렬 (0) | 2023.04.14 |
다른 cmd.exe 프롬프트에서 새 cmd.exe 창을 만듭니다. (0) | 2023.04.14 |