小编mel*_*r55的帖子

Anaconda和VirtualEnv

我有一个运行python 2.7.7的virtualenv.它有一套非常广泛的库,支持一组非常复杂的专有模块.换句话说,virtualenv需要保持其完整性.这当然是virtualenv的重点.

最近,我遇到了许多使用Anaconda很容易解决的问题.我在测试环境中尝试了它并且它运行得很好.现在我的任务是将这种新配置融入生产中.我不清楚如何将Anaconda纳入virtualenv,或者这是否是一个好主意.事实上,在我看来,我似乎应该使用anaconda安装作为新的源代码并解构旧的virtualenv ...将它所拥有的库合并到conda中.

有没有人建议最好的方法?如果要求合并环境,任何人都可以指出如何解决这个问题的解释吗?

python virtualenv anaconda conda

13
推荐指数
1
解决办法
2万
查看次数

发布到 kafka 主题的 Faust 示例

我很好奇您应该如何表达您希望将消息快速传递到 Kafka 主题。他们自述文件中的示例似乎没有写入主题:

import faust

class Greeting(faust.Record):
    from_name: str
    to_name: str

app = faust.App('hello-app', broker='kafka://localhost')
topic = app.topic('hello-topic', value_type=Greeting)

@app.agent(topic)
async def hello(greetings):
    async for greeting in greetings:
        print(f'Hello from {greeting.from_name} to {greeting.to_name}')

@app.timer(interval=1.0)
async def example_sender(app):
    await hello.send(
        value=Greeting(from_name='Faust', to_name='you'),
    )

if __name__ == '__main__':
    app.main()
Run Code Online (Sandbox Code Playgroud)

我希望hello.send在上面的代码中向该主题发布一条消息,但似乎没有。

有很多从主题中读取的示例,以及许多使用 cli 推送 ad-hoc 消息的示例。梳理文档后,我没有看到任何明确的代码发布主题示例。我只是疯了,上面的代码应该可以工作吗?

python apache-kafka faust

11
推荐指数
2
解决办法
4411
查看次数

气流 dag 失败...但所有任务都成功了

我对我们的气流 ui 中的某些东西感到非常困惑。在树视图(和图形视图)中,dag 指示已失败。然而,它的所有成员任务似乎都成功了。您可以在下面看到它(倒数第三个):

在此处输入图片说明

有谁知道这是怎么可能的,它意味着什么,或者人们将如何调查它?

python airflow

10
推荐指数
1
解决办法
1376
查看次数

如何将任意参数传递给烧瓶蓝图?

我有一个烧瓶api,我把它包裹在一个物体里.这样做使得单元测试变得轻而易举,因为我可以使用各种不同的设置来实例化api,具体取决于它是在生产,测试还是生产中.

我现在正在尝试扩展api,为此我正在使用蓝图.问题是我无法弄清楚如何将参数传递给蓝图.我的路由需要访问哪些数据库等信息,并且该信息不是静态的.如何将此信息传递到蓝图中?我在下面列出了代码作为示例:

api.py:

class MyApi(object):
    def __init__(self, databaseURI):
     self.app = Flask(__name__)
     self.app.register_blueprint(myblueprint)
Run Code Online (Sandbox Code Playgroud)

blueprint.py

myblueprint= Blueprint('myblueprint', __name__)
@myblueprint.route('/route', methods=['GET'])
def route():
  database = OpenDatabaseConnection(databaseURI)
Run Code Online (Sandbox Code Playgroud)

这里有一个相关的问题: 如何将构造函数参数传递给Flask蓝图?

但是回答这个问题的人解决了op的用例特定问题而没有真正回答如何将任意参数传递给蓝图的问题.

python oop arguments blueprint flask

9
推荐指数
2
解决办法
4151
查看次数

在初始查询 sqlalchemy 中限制子集合

我正在构建一个 api,如果用户请求它可以返回资源的子级。例如,usermessages. 我希望查询能够限制message返回的对象数量。

我发现了一个有用的技巧aboutl imiting在子集合对象的数量在这里。基本上,它表示以下流程:

class User(...):
    # ...
    messages = relationship('Messages', order_by='desc(Messages.date)', lazy='dynamic')

user = User.query.one()
users.messages.limit(10)
Run Code Online (Sandbox Code Playgroud)

我的用例涉及有时会返回大量用户。

如果我要遵循该链接中的建议并使用,.limit()那么我将需要遍历调用.limit()每个用户的整个用户集合。这比LIMIT在创建集合的原始 sql 表达式中使用效率低得多。

我的问题是,是否有可能使用声明来有效地(N+0)加载大量对象,同时使用 sqlalchemy 限制其子集合中的子集合的数量?

更新

需要明确的是,以下是我试图避免的

users = User.query.all()
messages = {}
for user in users:
    messages[user.id] = user.messages.limit(10).all()
Run Code Online (Sandbox Code Playgroud)

我想做一些更像:

users = User.query.option(User.messages.limit(10)).all()
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy declarative limit flask-sqlalchemy

9
推荐指数
1
解决办法
3446
查看次数

如何在docker-compose远程github构建中指定commit

我想Dockerfiles在github上找到的远程项目中使用构建服务.这是一个端到端的测试框架,所以我需要能够指定我想要构建的特定提交.我在尝试弄清楚如何提取特定提交时遇到了很多困难.

我有一个docker compose文件,看起来像这样:

version: '3'
services:
  web:
    build: https://${GITHUB_ACCESS}:@github.com/mycompany/web.git#${COMMIT_SHA}
Run Code Online (Sandbox Code Playgroud)

如果我省略,上述工作正常#${COMMIT_SHA}.不幸的是,如果我为我所关心的特定提交包含sha,我会收到以下错误:

ERROR: error fetching: error: no such remote ref <commit sha>
: exit status 128
Run Code Online (Sandbox Code Playgroud)

我确信沙存在,我已经和其他几个人一起尝试过以确定.我在这里得到的语法错误,或者docker-compose不支持引用特定的提交?

git build github docker docker-compose

9
推荐指数
1
解决办法
1318
查看次数

将"外部"类模型与flask sqlalchemy相关联

我们为各种python模块使用中央类模型.此模型使用SQLAlchemy定义.这些类都继承自declarative_base.

例如,我们的模型定义如下所示:

Base = declarative_base()

class Post(Base):
    __tablename__ = 'Posts'
    id = Column(INT, primary_key=True, autoincrement=True)
    body = Column(TEXT)
    timestamp = Column(TIMESTAMP)
    user_id = Column(INT, ForeignKey('Users.uid'))
Run Code Online (Sandbox Code Playgroud)

我们一直在构建一个烧瓶网络应用程序,我们在其中使用相同的模型.我们发现了一个棘手的问题,因为flask-sqlalchemy似乎是以这样的方式设计的,它希望通过传入会话的活动实例来定义其模型中使用的所有类.以下是"适当的"flask-sqalchemy类模型定义的示例:

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)
Run Code Online (Sandbox Code Playgroud)

请注意,flask-sqlalchemy的上述示例需要已经实例化的sql会话.这让我们感到震惊,因为我们完全不知道如何将我们的SqlAlchemy模型集成到烧瓶中.我们真的想特别使用flask-security套件.

这个问题在SO之前提出过.这里,例如: 如何使用现有sqlalchemy模型的flask-sqlalchemy?

我们的要求与那些接受回复的人的要求不同.响应指出一个人失去了使用User.query的能力,但这正是我们必须保留的事情之一.

放弃我们漂亮,优雅,中心阶级的模型定义,而不是使用flask-sqlalchemy所需要的东西是不可行的.我们有什么方法可以将我们的模型与SQLAlchemy()对象相关联吗?在我们的类上获取.query()方法的加分点似乎是flask-security所需要的.

python sqlalchemy flask flask-sqlalchemy flask-security

8
推荐指数
1
解决办法
2167
查看次数

更改elasticbeanstalk环境vpc

我似乎无法找到任何关于此的文档.如何更改弹性豆秆环境的VPC?我已尝试将安全组从当前组更改为新VPC中的组,但亚马逊返回以下错误:

SecurityGroups: Invalid option value: 'sg-a91f43d2' (Namespace: 'aws:autoscaling:launchconfiguration', OptionName: 'SecurityGroups'): The security group 'sg-a91f43d2' does not exist
Run Code Online (Sandbox Code Playgroud)

规则确实存在,所以我认为它是抱怨的,因为规则在不同的VPC(这是整点).

amazon-web-services amazon-vpc amazon-elastic-beanstalk

8
推荐指数
1
解决办法
3170
查看次数

docker-compose集成在pycharm中不起作用

我已经使用此处的说明将docker-compose设置为pycharm中的远程解释器.

docker-compose构建工作正常,但是当尝试使用此解释器运行测试时,我收到以下错误:

Testing started at 12:13 AM ...
docker-compose://[/home/melchoir55/gitrepos/python_rest/docker-compose.yml]:python_rest/python -u /opt/.pycharm_helpers/pycharm/_jb_unittest_runner.py --path /opt/project/tests
Traceback (most recent call last):
  File "bin/docker-compose", line 6, in <module>
  File "compose/cli/main.py", line 71, in main
  File "compose/cli/main.py", line 124, in perform_command
  File "compose/cli/command.py", line 38, in project_from_options
  File "compose/cli/docker_client.py", line 84, in tls_config_from_options
  File "site-packages/docker/tls.py", line 81, in __init__
docker.errors.TLSParameterError: Path to a certificate and key files must be provided through the client_config param. TLS configurations should map the Docker CLI client configurations. …
Run Code Online (Sandbox Code Playgroud)

python pycharm docker docker-compose

8
推荐指数
1
解决办法
2621
查看次数

Monkeypatch 在单元测试中持续存在 python

我有一个自定义框架,它为不同的客户端运行不同的代码。我对某些方法进行了猴子修补,以便为客户定制功能。

这是简化的模式:

    #import monkeypatches here
    if self.config['client'] == 'cool_dudes':
        from app.monkeypatches import Stuff
    if self.config['client'] == 'cool_dudettes':
        from app.monkeypatches import OtherStuff
Run Code Online (Sandbox Code Playgroud)

这是一个补丁示例:

from app.framework.stuff import Stuff

def function_override(self):
  return pass

Stuff.function = function_override
Run Code Online (Sandbox Code Playgroud)

当程序以批处理方式执行时,这种方法效果很好,每次都从头开始旋转。然而,当运行单元测试时,我发现猴子补丁在测试中持续存在,导致意外的行为。

我意识到使用面向对象的继承方法来进行这些重写会好得多,但我继承了这个代码库,并且目前无权重新构建它到那种程度。

除非正确地重新构建程序,否则如何防止这些猴子补丁在单元测试中持续存在?

python unit-testing monkeypatching

7
推荐指数
1
解决办法
1528
查看次数