小编Sco*_*oks的帖子

在setuptools包上的Pyinstaller

我正在尝试在我使用Click库在Python中构建的CLI应用程序上运行PyInstaller .我在使用PyInstaller构建项目时遇到了麻烦.PyInstaller在他们的GitHub wiki中有一个名为Recipe Setuptools Entry Point的文档,该文档提供了有关如何将PyInstaller与setuptools包一起使用的信息,我正在为此项目使用它.但是,它似乎在我运行时找不到基本模块pyinstaller --onefile main.spec.

我的问题是:问题只是我的文件夹结构的问题吗?Recipe Setuptools入口点是否采用某种文件结构?

相关信息

Pyinstaller输出

184 INFO: PyInstaller: 3.3.1
184 INFO: Python: 3.6.4
189 INFO: Platform: Darwin-16.7.0-x86_64-i386-64bit
193 INFO: UPX is available.
Traceback (most recent call last):
  File "/usr/local/bin/pyinstaller", line 11, in <module>
    sys.exit(run())
  File "/usr/local/lib/python3.6/site-packages/PyInstaller/__main__.py", line 94, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "/usr/local/lib/python3.6/site-packages/PyInstaller/__main__.py", line 46, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/PyInstaller/building/build_main.py", line 791, in main
    build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
  File …
Run Code Online (Sandbox Code Playgroud)

python setuptools pyinstaller python-3.x python-click

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

CentOS相当于dpkg -s

我正在调整以前为Ubuntu编写的CentOS准备脚本.

在Ubuntu脚本中,dpkg -s {some program}经常调用该命令.例如,一个这样的命令是dpkg -s snmpd检查是否安装了SNMP守护程序.

CentOS中的等价物是什么?我知道RPM是包管理器.该命令rpm -q类似,但它查找包而不是程序.

例如,运行rpm -q snmpd返回:

package snmpd is not installed
Run Code Online (Sandbox Code Playgroud)

我的问题是,相当于Ubuntu命令的CentOS是什么dpkg -s

ubuntu centos rpm dpkg package

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

使用 Terraform 的 Google Cloud 凭据

这是一个新手问题,但我刚刚开始使用 Terraform / Terragrunt 进行 GCP 配置,我发现获取 GCP 凭据的工作流程非常混乱。我来自只使用 AWS,在那里获取凭证并在 AWS CLI 中配置它们非常简单。

基本上,Google Cloud Provider 文档指出您应该provider像这样定义一个块:

provider "google" {
  credentials = "${file("account.json")}"
  project     = "my-project-id"
  region      = "us-central1"
  zone        = "us-central1-c"
}
Run Code Online (Sandbox Code Playgroud)

credentials字段显示我(显然)必须生成一个服务帐户,并在我的文件系统上的某处保留一个 JSON。

但是,如果我运行该命令gcloud auth application-default login,则会生成一个位于~/.config/gcloud/application_default_credentials.json;的令牌。或者我也可以使用gcloud auth login <my-username>. 从那里我可以使用gcloud命令从命令行访问 Google API(这也是 Terraform 在幕后所做的)。

那么为什么 Terraform 提供程序需要服务帐户的 JSON 文件呢?为什么不能只使用gcloudCLI 工具已经在使用的凭据?

顺便说一句,如果我将 Terraform 配置为指向该application_default_credentials.json文件,则会出现以下错误:

正在初始化模块...

正在初始化后端...

错误:无法获取现有工作区:查询 Cloud Storage 失败:获取 …

google-cloud-platform terraform terragrunt terraform-provider-gcp

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

在Python中更好地使用`make_pass_decorator`请点击

我正在寻找一些建议,以避免不得不两次实例化一个类;这更多是一个设计模式问题。我正在使用Python Click库创建一个应用程序。

我有一个Settings类,该类首先将所有初始默认设置加载到字典中(硬编码到应用程序中),然后将用户计算机上TOML文件中的所有设置覆盖(如果指定)加载到字典中,然后最后将两者合并并将它们用作类实例(settings.<something>)的属性。

对于大多数这些设置,我希望能够指定命令行标志。优先级将变为:

  1. 命令行标志。如果未指定,则回退到...
  2. TOML文件中的用户设置。如果未指定,则最后回退到...
  3. 应用默认

为了获得此结果,我发现在使用Click的装饰器时,我必须执行以下操作:

import click
from myapp import Settings

settings = Settings()
pass_settings = click.make_pass_decorator(Settings, ensure=True)

@click.command()
@click.help_option('-h', '--help')
@click.option(
    '-s', '--disk-size',
    default=settings.instance_disk_size,
    help="Disk size",
    show_default=True,
    type=int
)
@click.option(
    '-t', '--disk-type',
    default=settings.instance_disk_type,
    help="Disk type",
    show_default=True,
    type=click.Choice(['pd-standard', 'pd-ssd'])
)
@pass_settings
def create(settings, disk_size, disk_type):
    print(disk_size)
    print(disk_type)
Run Code Online (Sandbox Code Playgroud)

为什么要两次?

  • settings = Settings()需要线来提供@click.option与所述装饰default值。该default值可以来自用户替代TOML文件(如果存在),也可以来自应用程序默认值。
  • click.make_pass_decorator似乎是交错指令推荐的方式; 他们的文档中甚至提到了它。在函数内部,除了传递的CLI参数外,有时我还需要引用Settings …

python decorator python-decorators python-click

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

SQLAlchemy 验证 SSL 连接

我想验证 SQLAlchemy 在create_engine用于连接 PostgreSQL 数据库时设置的 SSL 连接。例如,如果我有以下 Python 3 代码:

from sqlalchemy import create_engine

conn_string = "postgresql+psycopg2://myuser:******@someserver:5432/somedb"

conn_args = {
    "sslmode": "verify-full",
    "sslrootcert": "/etc/ssl/certs/ca-certificates.crt",
}

engine = create_engine(conn_string, connect_args=conn_args)
Run Code Online (Sandbox Code Playgroud)

我知道我可以打印 的内容engine.__dict__,但它不包含有关用于连接的 SSL 设置(TLS 版本、密码套件等)的任何信息:

{
    '_echo': False,
    'dialect': <sqlalchemy.dialects.postgresql.psycopg2.PGDialect_psycopg2 object at 0x7f988a217978>,
    'dispatch': <sqlalchemy.event.base.ConnectionEventsDispatch object at 0x7f988938e788>,
    'engine': Engine(postgresql+psycopg2://myuser:******@someserver:5432/somedb),
    'logger': <Logger sqlalchemy.engine.base.Engine (DEBUG)>,
    'pool': <sqlalchemy.pool.impl.QueuePool object at 0x7f988a238c50>,
    'url': postgresql+psycopg2://myuser:******@someserver:5432/somedb
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以做类似的事情SELECT * FROM pg_stat_ssl;,但是 SQLAlchemy 引擎是否将这种信息存储为类属性/方法?

谢谢!

python postgresql ssl sqlalchemy python-3.x

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

没有前导目录的Git稀疏结账

我理解如何在Git中配置稀疏结账,但我想知道是否可以消除主要目录.例如,假设我有一个Git存储库,其文件夹结构如下:

  • 文件夹1 /富
  • 文件夹2 /富/酒吧/东东
  • folder3 /另一个/富/酒吧/ stuff2

我只想要里面的内容stuff2.对于那些目录的稀疏检出,.git/info/spare-checkout文件看起来像这样:

folder3/another/foo/bar/stuff2/
Run Code Online (Sandbox Code Playgroud)

我的问题是在我完成稀疏结账后,我没有看到stuff2或者stuff2我的目录根目录内的内容; 我看到folder3,然后所有的子目录导致stuff2.

我猜这个问题的答案是Git不可能,但我只是想确定一下.这是我想念的SVN的一种(也是唯一的)行为; 能够运行svn co https://url.com/myrepo/folder3/another/foo/bar/stuff2 .并将内容转储到当前目录中.

git directory-structure sparse-checkout

6
推荐指数
1
解决办法
2412
查看次数

使用 Python Click 扩展 BASH 完成

我想自定义我的 Python Click CLI 程序的 BASH 完成功能,不仅包括脚本的命令/子命令,还包括脚本创建的对象。

假设我的程序被调用cli-tool,它可以foo使用以下命令创建对象:

cli-tool object create foo
Run Code Online (Sandbox Code Playgroud)

为简单起见,假设该命令只是将参数字符串(foo在本例中)连接到位于~/.cli-tool/objects/foo. 这样做cat ~/.cli-tool/objects/foo,然后将打印foo在你的终端。

我希望该工具做的是当我输入:

cli-tool object get <TAB><TAB>
Run Code Online (Sandbox Code Playgroud)

终端然后将名单foo及任何其他文件里面住~/.cli-tool/objects

作为记录,我已阅读Python Click 6.x stable 文档,其中明确指出:

目前,Bash 补全是一个不可定制的内部功能。这在未来的版本中可能会放宽。

我希望有一种方法可以从以下命令中提取完整的BASH 完成脚本:

eval "$(_CLI_TOOL_COMPLETE=source cli-tool)"
Run Code Online (Sandbox Code Playgroud)

然后自己定制。我也看过点击完成项目,但我不确定它除了扩展 Zsh 和 Fish shell 的完成之外还有什么作用。

有没有人达到我上面提到的完成类型?

command-line-interface bash-completion python-click

4
推荐指数
1
解决办法
3619
查看次数

SVN在服务器端恢复

一个非常聪明的开发人员几乎删除了整个存储库并提交了它(rev 210).我的计算机上有一个工作副本,但存储库相当大.

我想创建一个与上一个好的修订版(209)相同的新修订版(211).我不想保留修订版210中的任何内容,这是错误的提交.这是开发人员的错误,就我而言,他们将不得不改写任何东西.

想法?

svn commit revert

3
推荐指数
1
解决办法
7918
查看次数

MySQL 在不改变结构的情况下转换为 UTF8

我有一个相当大的数据库,我试图将其从字符集和排序规则转换latin1/latin1_swedish_ciutf8mb4/utf8mb4_unicode_ci. 我希望设置复制到从站,运行转换,然后在完成后提升从站以避免停机。

我注意到在运行查询时...

ALTER TABLE `sometable` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

... MySQL的自动转换textmediumtextmediumtextlongtext

有没有办法关闭这个功能?MySQL有这个特性很好,但问题是它破坏了复制,因为slave上的表结构与master不同。

mysql replication utf-8

3
推荐指数
1
解决办法
3374
查看次数

普罗米修斯或使用 rate() 时

概括

我试图弄清楚如何|在 Prometheus 查询中正确使用 OR运算符,因为我导入的 Grafana 仪表板不起作用。

长版

我正在尝试根据从运行AppMetrics/Prometheus 的Kubernetes pod 中抓取的一些数据来调试 Grafana 仪表板;仪表板在这里。基本上发生的情况是,当在serverGrafana 仪表板上选择“全部”的值时(server在这种情况下是一个单独的 pod),没有数据出现。但是,当我选择一个单独的 pod 时,数据确实会出现。

以下是从两个 Pod 中抓取的相同指标的示例:

# HELP application_httprequests_transactions 
# TYPE application_httprequests_transactions summary
application_httprequests_transactions_sum{server="myapp-test-58d94bf78d-jdq78",app="MyApp",env="test"} 5.006965628
application_httprequests_transactions_count{server="myapp-test-58d94bf78d-jdq78",app="MyApp",env="test"} 1367
application_httprequests_transactions{server="myapp-test-58d94bf78d-jdq78",app="MyApp",env="test",quantile="0.5"} 0.000202825
application_httprequests_transactions{server="myapp-test-58d94bf78d-jdq78",app="MyApp",env="test",quantile="0.75"} 0.000279318
application_httprequests_transactions{server="myapp-test-58d94bf78d-jdq78",app="MyApp",env="test",quantile="0.95"} 0.000329862
application_httprequests_transactions{server="myapp-test-58d94bf78d-jdq78",app="MyApp",env="test",quantile="0.99"} 0.055584233

# HELP application_httprequests_transactions 
# TYPE application_httprequests_transactions summary
application_httprequests_transactions_sum{server="myapp-test-58d94bf78d-l9tdv",app="MyApp",env="test"} 6.10214788
application_httprequests_transactions_count{server="myapp-test-58d94bf78d-l9tdv",app="MyApp",env="test"} 1363
application_httprequests_transactions{server="myapp-test-58d94bf78d-l9tdv",app="MyApp",env="test",quantile="0.5"} 0.000218548
application_httprequests_transactions{server="myapp-test-58d94bf78d-l9tdv",app="MyApp",env="test",quantile="0.75"} 0.000277483
application_httprequests_transactions{server="myapp-test-58d94bf78d-l9tdv",app="MyApp",env="test",quantile="0.95"} 0.033821094
application_httprequests_transactions{server="myapp-test-58d94bf78d-l9tdv",app="MyApp",env="test",quantile="0.99"} 0.097113234
Run Code Online (Sandbox Code Playgroud)

我在 Grafana 中运行查询检查器以找出它正在调用哪个查询,然后在 Prometheus 本身中运行 PromQL 查询。基本上,当我单独执行以下 PromQL 查询时,它们会返回数据: …

grafana kubernetes prometheus promql

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

Flask / SQL Alchemy 原始查询而不是类方法

在我问之前,我会承认这是一个奇怪的问题。我想知道是否可以使用原始 SQL 而不是使用方法本身来复制 Flask/SQL Alchemy 类方法?

长话短说,我和我的队友正在参加数据库设计课程,我们现在处于实施阶段,我们正在编写基于我们的数据库架构设计的应用程序。我们想让事情变得简单,所以我们选择在 Python 中使用 Flask。我们正在关注Flask Mega 教程,这是一个解释如何像我们所做的那样构建基本站点的精彩教程。我们刚刚完成了第 5 章:用户登录,并且正在继续。

app/routes.py脚本中,教程做了一些事情来获取用户信息。以下是示例应用程序的示例登录路径:

from flask_login import current_user, login_user
from app.models import User

# ...

@app.route('/login', methods=['GET', 'POST'])
def login():
    if current_user.is_authenticated:
        return redirect(url_for('index'))
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.username.data).first()
        if user is None or not user.check_password(form.password.data):
            flash('Invalid username or password')
            return redirect(url_for('login'))
        login_user(user, remember=form.remember_me.data)
        return redirect(url_for('index'))
    return render_template('login.html', title='Sign In', form=form)
Run Code Online (Sandbox Code Playgroud)

该行user = User.query.filter_by(username=form.username.data).first()是我感兴趣的。基本上,该行实例化了User类,它是来自 SQL …

python sqlalchemy flask flask-sqlalchemy

-1
推荐指数
1
解决办法
3929
查看次数