我制作了我的项目,setuptools
我想用它进行测试tox
.我在变量中列出了依赖项并添加到setup()
参数(tests_require
和extras_require
)中.我的项目需要安装tests_require
测试中列出的所有依赖项,但pip install
不安装它们.
我尝试了这个,但它不起作用:
install_command = pip install {opts} {packages}[tests]
Run Code Online (Sandbox Code Playgroud)
如何安装测试依赖项而无需管理多个依赖项列表(即在两者test_requirements.txt
和tests_require
变量中列出所有依赖项)?
我正在开发python聊天机器人框架asyncio
.但是我看PEP-492并且有新的语法,async
/ await
最后它被接受了.
我喜欢async
/ await
syntax,我想用它.但我担心3.4后缀兼容性.
如果我在代码中使用新语法,有人可以在3.4中使用它吗?
例如,我写了一些这样的代码,
import asyncio
class ChatBot:
def __init__(self, loop):
self.loop = loop
async def connect(self):
self.reader, self.writer = await asyncio.open_connect(HOST, PORT, loop=self.loop)
async def read():
return await self.reader.read()
async def run(self):
running = True
while running:
try:
await self.connect()
line = await self.read()
if not line:
continue
await self.parse(line)
except BotInternalError as e:
if e.stop:
running = False
break
except:
pass
async def parse(self, msg):
if …
Run Code Online (Sandbox Code Playgroud) 我用谷歌搜索python coroutine
,只看到了发电机(几乎所有的例子yield
都没用asyncio
.)
它们真的一样吗?
asyncio.coroutine
和发电机有什么区别?
我想以异步方式运行我的代码.我应该装饰@asyncio.coroutine
什么以及我应该yield from
为异步操作调用什么?
在我的例子中,我有一些没有装饰器的示例代码.(简单的聊天机器人看起来像IRC)
import asyncio
class ChatBot:
def __init__(self, loop):
conn = asyncio.open_connection(HOST, PORT, loop=loop)
self.reader, self.writer = yield from conn
def send(self, msg):
self.writer.write(msg)
def read(self):
msg = yield from self.reader.readline()
return msg
def run(self):
while True:
msg = self.read()
self.parse(msg)
def parse(self, msg):
if msg.startswith('PING'):
self.some_work(msg)
elif msg.startswith('ERROR'):
self.some_error()
else:
self.server_log(msg)
def some_work(self, msg):
# some work. It can call asynchronous function like I/O or long operation. It can use self.send().
def some_error(self, msg): …
Run Code Online (Sandbox Code Playgroud) python ×4
python-3.x ×3
asynchronous ×2
coroutine ×2
easy-install ×1
pip ×1
setuptools ×1
tox ×1