我正在尝试在我使用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) 我正在调整以前为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?
这是一个新手问题,但我刚刚开始使用 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
我正在寻找一些建议,以避免不得不两次实例化一个类;这更多是一个设计模式问题。我正在使用Python Click库创建一个应用程序。
我有一个Settings类,该类首先将所有初始默认设置加载到字典中(硬编码到应用程序中),然后将用户计算机上TOML文件中的所有设置覆盖(如果指定)加载到字典中,然后最后将两者合并并将它们用作类实例(settings.<something>)的属性。
对于大多数这些设置,我还希望能够指定命令行标志。优先级将变为:
为了获得此结果,我发现在使用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文件(如果存在),也可以来自应用程序默认值。Settings …我想验证 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 引擎是否将这种信息存储为类属性/方法?
谢谢!
我理解如何在Git中配置稀疏结账,但我想知道是否可以消除主要目录.例如,假设我有一个Git存储库,其文件夹结构如下:
我只想要里面的内容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 .并将内容转储到当前目录中.
我想自定义我的 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 的完成之外还有什么作用。
有没有人达到我上面提到的完成类型?
一个非常聪明的开发人员几乎删除了整个存储库并提交了它(rev 210).我的计算机上有一个工作副本,但存储库相当大.
我想创建一个与上一个好的修订版(209)相同的新修订版(211).我不想保留修订版210中的任何内容,这是错误的提交.这是开发人员的错误,就我而言,他们将不得不改写任何东西.
想法?
我有一个相当大的数据库,我试图将其从字符集和排序规则转换latin1/latin1_swedish_ci为utf8mb4/utf8mb4_unicode_ci. 我希望设置复制到从站,运行转换,然后在完成后提升从站以避免停机。
我注意到在运行查询时...
ALTER TABLE `sometable` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
... MySQL的自动转换text到mediumtext或mediumtext以longtext等
有没有办法关闭这个功能?MySQL有这个特性很好,但问题是它破坏了复制,因为slave上的表结构与master不同。
概括
我试图弄清楚如何|在 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 查询时,它们会返回数据: …
在我问之前,我会承认这是一个奇怪的问题。我想知道是否可以使用原始 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 ×4
python-click ×3
python-3.x ×2
sqlalchemy ×2
centos ×1
commit ×1
decorator ×1
dpkg ×1
flask ×1
git ×1
grafana ×1
kubernetes ×1
mysql ×1
package ×1
postgresql ×1
prometheus ×1
promql ×1
pyinstaller ×1
replication ×1
revert ×1
rpm ×1
setuptools ×1
ssl ×1
svn ×1
terraform ×1
terragrunt ×1
ubuntu ×1
utf-8 ×1