我的 Python 包有可选功能 ( extras_require),我希望默认选择它们。
更具体地说,我希望其pip install mypackage行为类似于pip install mypackage[extra]并且我可以安装带有类似pip install mypackage[core].
setup(
name="mypackage",
...
extras_require={
"extra": ["extra1>=1.2", "extra2"],
"core": [],
}
)
Run Code Online (Sandbox Code Playgroud)
是否可以通过类似于上面的设置脚本来实现此目的?
GitHub REST API v3为GPG密钥public_key返回的字段格式是什么?
例如,该命令curl -v -H "Accept: application/vnd.github.cryptographer-preview" https://api.github.com/users/DurandA/gpg_keys返回以下键:
pub dsa2048/403094DF 2017-09-03 [SC] [expires: 2018-09-03]
uid [ultimate] Arnaud Durand <arnaud.durand@unifr.ch>
sub elg2048/A454F414 2017-09-03 [E] [expires: 2018-09-03]
Run Code Online (Sandbox Code Playgroud)
根据API文档:
public_key响应字段中返回的数据不是GPG格式的密钥.当用户上载GPG密钥时,将对其进行解析,并提取并存储加密公钥.此加密密钥是此页面上的API返回的密钥.此密钥不适合由GPG等程序直接使用.
是否可以从CLI或以编程方式使用这些密钥?
我正在实现一个要使用的异步迭代器,async for它应该以(大部分)固定间隔返回一个新值。
我们可以用一个简单的时钟来说明这样的迭代器,它每 ~n 秒增加一个计数器:
import asyncio
class Clock(object):
def __init__(self, interval=1):
self.counter = 0
self.interval = interval
self.tick = asyncio.Event()
asyncio.ensure_future(self.tick_tock())
async def tick_tock(self):
while True:
self.tick.clear()
await asyncio.sleep(self.interval)
self.counter = self.__next__()
self.tick.set()
def __next__(self):
self.counter += 1
return self.counter
def __aiter__(self):
return self
async def __anext__(self):
await self.tick.wait()
return self.counter
Run Code Online (Sandbox Code Playgroud)
有没有比使用更好或更干净的方法asyncio.Event?不止一个协程会async for在这个迭代器上。
我想更新一个库,以便要求是可选的(使用extras_require)。
不幸的是,从可选需求导入的类在库中随处用作类型提示。这是一个例子:
from typing import List
try:
from extra.sub import ExtraFoo, ExtraBar
except ImportError:
pass
def optional(foo: ExtraFoo) -> List[ExtraBar]:
pass
def greeting(name: str) -> str:
return 'Hello ' + name
if __name__ == '__main__':
greeting('John Smith')
Run Code Online (Sandbox Code Playgroud)
optional()在此示例中,如果extra未安装,我们将不会使用。事实上,这样的代码会引发一个NameErrorsinceExtraFoo并ExtraBar用作类型提示。
一个可能的解决方法是在块中声明class ExtraFoo: passand 。然而,在同一模块中具有多种类型的代码中到处都存在这样的情况。class ExtraBar: passexcept
我想避免通过虚拟导入声明污染代码。有没有通用的方法来处理这种情况(例如代理模块)?
我使用 Python 3.8 和Lambda 代理API 网关触发器创建了一个 AWS Lambda 函数:

确实可以返回自定义 HTTP 错误代码:
def lambda_handler(event, context):
return {
'statusCode': 400,
'body': json.dumps('This is a bad request!')
}
Run Code Online (Sandbox Code Playgroud)
但是,一些在线示例(例如1、2)只是引发一个 Exception 以返回带有自定义消息的错误。如果在处理程序上抛出异常,如下所示,服务器将返回 502,因为响应不是代理集成的预期格式:
def lambda_handler(event, context):
raise Exception('This is an exception!')
Run Code Online (Sandbox Code Playgroud)
我认为这些示例依赖于一些集成响应模板并且不使用代理集成。是否可以使用 Lambda 代理实现相同的目的?我想避免在 Lambda 处理程序中全局捕获异常以构建自定义错误响应。
PEP 492提到:
async with EXPR as VAR:
BLOCK
Run Code Online (Sandbox Code Playgroud)
在语义上等同于:
mgr = (EXPR)
aexit = type(mgr).__aexit__
aenter = type(mgr).__aenter__
VAR = await aenter(mgr)
try:
BLOCK
except:
if not await aexit(mgr, *sys.exc_info()):
raise
else:
await aexit(mgr, None, None, None)
Run Code Online (Sandbox Code Playgroud)
然而,VAR = await aenter(mgr)它不在try区块中,所以我想知道是否__aenter__()允许失败。
例如,在此aiohttp片段中(摘自入门):
import aiohttp
import asyncio
async def main():
async with aiohttp.ClientSession() as session:
async with session.get('http://python.org') as response:
print("Status:", response.status)
print("Content-type:", response.headers['content-type'])
html = await response.text()
print("Body:", html[:15], …Run Code Online (Sandbox Code Playgroud) 我想使用 OpenSSL CLI生成DER 格式的secp256r1密钥对。
我正在使用以下命令:
$ openssl ecparam -name prime256v1 -outform der -genkey -out privkey.der
$ openssl ec -inform der -in privkey.der -pubout -outform der -out pubkey.der
Run Code Online (Sandbox Code Playgroud)
但是,第二个命令触发了无法加载密钥错误:
read EC key
unable to load Key
139911012984576:error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag:crypto/asn1/tasn_dec.c:1112:
139911012984576:error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error:crypto/asn1/tasn_dec.c:274:Type=EC_PRIVATEKEY
139911012984576:error:10092010:elliptic curve routines:d2i_ECPrivateKey:EC lib:crypto/ec/ec_asn1.c:925:
Run Code Online (Sandbox Code Playgroud) python ×5
python-3.x ×3
setuptools ×2
aiohttp ×1
asynchronous ×1
aws-lambda ×1
ecdsa ×1
github ×1
github-api ×1
openpgp ×1
openssl ×1
packaging ×1
pgp ×1
pip ×1
pypi ×1
semantics ×1