Support auto install extra pypi packages. (#158)

* 支持自动安装额外的 pypi 扩展包
This commit is contained in:
Xtao_dada 2021-12-19 00:22:44 +08:00 committed by GitHub
parent defdfd7ad2
commit 12320e2a59
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 13 deletions

1
.gitignore vendored
View File

@ -127,6 +127,7 @@ dump.rdb
keyword.list
requirements2.txt
languages/custom.yml
unknown_errors.txt
# Spyder project settings
.spyderproject

View File

@ -6,13 +6,7 @@ from concurrent.futures import CancelledError
import sentry_sdk
from sentry_sdk.integrations.redis import RedisIntegration
python36 = True
try:
from asyncio.exceptions import CancelledError as CancelError
python36 = False
except:
pass
from asyncio import CancelledError as CancelError
from subprocess import run, PIPE
from datetime import datetime
from time import time
@ -279,7 +273,8 @@ def before_send(event, hint):
AlreadyInConversationError, ConnectedError, KeyboardInterrupt,
OSError, AuthKeyDuplicatedError, ResponseError, SlowModeWaitError,
PeerFloodError, MessageEditTimeExpiredError, PeerIdInvalidError,
AuthKeyUnregisteredError, UserBannedInChannelError, AuthKeyError)):
AuthKeyUnregisteredError, UserBannedInChannelError, AuthKeyError,
CancelError)):
return
elif exc_info and isinstance(exc_info[1], UserDeactivatedBanError):
# The user has been deleted/deactivated
@ -288,9 +283,6 @@ def before_send(event, hint):
except Exception as exc:
print(exc)
exit(1)
if not python36:
if exc_info and isinstance(exc_info[1], CancelError):
return
if time() <= report_time + 30:
report_time = time()
return
@ -303,7 +295,7 @@ report_time = time()
start_time = datetime.utcnow()
git_hash = run("git rev-parse HEAD", stdout=PIPE, shell=True).stdout.decode()
sentry_sdk.init(
"https://ae2b937dba4a4f948f13ae1c902b30a3@o416616.ingest.sentry.io/5312335",
"https://88b676b38216473db3eb3dd5e1da0133@o416616.ingest.sentry.io/5312335",
traces_sample_rate=1.0,
release=git_hash,
before_send=before_send,

View File

@ -1,9 +1,13 @@
""" Libraries for python modules. """
import aiohttp
import subprocess
from importlib.util import find_spec
from sys import executable
from os import remove
from os.path import exists
from typing import Any
from typing import Any, Optional
from emoji import get_emoji_regexp
from random import choice
@ -214,6 +218,18 @@ def clear_emojis(target: str) -> str:
return get_emoji_regexp().sub(u'', target)
def pip_install(package: str, version: Optional[str] = "", alias: Optional[str] = "") -> bool:
""" Auto install extra pypi packages """
if not alias:
# when import name is not provided, use package name
alias = package
if find_spec(alias) is None:
subprocess.call([executable, "-m", "pip", "install", f"{package}{version}"])
if find_spec(package) is None:
return False
return True
async def admin_check(event):
if event.is_private:
return False