我正在从源代码库部署 Google Cloud 函数。只要我没有在我main.py的存储库中对我的任何用户定义函数(即除 之外的任何一个package或package2以下的脚本/函数)进行任何引用,我就可以使 Google 函数很好地部署main.py。
.
??? package
| ??? __init__.py
| ??? main.py
| ??? requirements.txt
| ??? script1.py
| ??? script2.py
??? package2
| ??? __init__.py
| ??? script3.py
| ??? script4.py
??? ...
Run Code Online (Sandbox Code Playgroud)
我最近有 2 个关于此函数的 Stack Overflow 问题在此处和此处部署。他们共同引导我找到一个解决方案,其中main.py和requirements.txt位于一个包中,我以该包作为源部署 Google Cloud Function。现在的问题是我需要能够访问其他包/脚本中的函数/脚本。如果我from package.script1 import foo在main.py部署函数时包含类似的语句,则会收到如下所示的错误:
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function load error: Code in file …Run Code Online (Sandbox Code Playgroud) python git package google-cloud-platform google-cloud-functions
我正在部署一个谷歌云函数,它将启动其他谷歌云函数google.cloud.pubsub_v1,我收到了这个错误ImportError: cannot import name 'pubsub' from 'google.cloud' (unknown location)
我的requirements.txt文件的开头是这样的
# Function dependencies, for example:
# package>=version
google-cloud-pubsub
....
Run Code Online (Sandbox Code Playgroud)
我的 main.py 脚本的开头如下所示:
import base64
import json
from google.cloud import pubsub_v1
publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(<PROJECT_ID>, <PUBSUB_TOPIC>)
Run Code Online (Sandbox Code Playgroud)
我正在从 Google Cloud Source Repository 部署此代码。我已经通读了这篇关于我的错误的SO 帖子,但这个问题似乎是关于客户端应用程序中出现的这个错误。我的错误是在部署过程中由 Google Cloud 函数本身生成的。我无权sudo使用 Google 用来运行我的进程的自动创建的 VM,对吗?我应该能够从requirements.txt文件中解决这个问题,但我尝试过的任何东西似乎都不起作用。
更令人沮丧的是,当我在基于网络的 Google 函数编辑器的“内联编辑器”中放置相同的代码时,我没有收到错误消息。我只在从存储库加载代码时收到此错误。
存储库中的当前文件结构如下所示:
.
??? package
| ??? main.py
| ??? script1.py
| ??? script2.py
??? package2
??? …Run Code Online (Sandbox Code Playgroud) python git google-cloud-platform google-cloud-pubsub google-cloud-functions
我在 Windows 机器上使用 uvicorn 在 Python 中运行 FastAPI 应用程序。当我要么
host从 uvicorn.run 调用中删除参数)from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
if __name__ == '__main__':
uvicorn.run(app, port=8080, host='0.0.0.0')
Run Code Online (Sandbox Code Playgroud)
当我在浏览器上转到 0.0.0.0:8080 时,收到一条错误消息,提示“无法访问此站点”。
我已经检查了我当前的活动端口,以确保我没有使用冲突netstat -ao |find /i "listening"并且 0.0.0.0:8080 没有被使用。
我当前的文件配置如下所示:
working_directory
??? app
??? gunicorn_conf.py
??? main.py
Run Code Online (Sandbox Code Playgroud)
我的 gunicorn_conf.py 非常简单,只是尝试设置主机和端口:
host = "0.0.0.0"
port = "8080"
Run Code Online (Sandbox Code Playgroud)
当我指定主机“0.0.0.0”时,如何使其工作?
我有一个使用 uvicorn 的 Python FastAPI 应用程序。我把它打包在 docker 容器中。当我使用如下命令运行应用程序(在 Windows 10 计算机上的 Power Shell 中)时:docker run -p 8080:8080 my-image-name我收到以下 uvicorn 启动文本:
INFO: Started server process [1]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
Run Code Online (Sandbox Code Playgroud)
当我按CTRL+C杀死该应用程序时,什么也没有发生。我总是最终不得不关闭终端才能让它停止。
这是因为它在 docker 容器中运行吗?
我知道我可以在分离模式 ( ) 下运行容器-d,但有时我想在容器日志发生时观察它们。
如何终止 docker 映像和 uvicorn 进程并保持终端仍在运行?
我正在尝试实现基于Git样式存储库中代码的Google Cloud函数。我已将代码链接到Google Cloud Platform的“源存储库”,并且将代码复制并粘贴到GCP函数“内联编辑器”中时,我的函数运行正常。当我切换到“ Cloud Source存储库”选项时,我可以知道它正在从该存储库中读取数据。在此之前,我曾尝试过其他错误。但是,在解决之前/其他问题之后,现在出现此错误:
Function load error: File main.py that is expected to define function doesn't exist
我的文件的结构与此类似,main.py位于根目录中:
.
??? package
| ???script1.py
| ???script2.py
??? package2
??? ...
??? main.py
??? requirements.txt
Run Code Online (Sandbox Code Playgroud)
从上可以正常读取requirements.txt(某些先前的错误来自该读取过程),但是为什么不从中读取main.py呢?我在GCP功能中的设置如下所示:
我试图将main.py移至项目中的另一个目录,并将“带有源代码的目录”设置为该目录,但这给了我一个错误,提示它找不到该目录。有建设性的想法吗?
我使用的不是我的存储库中的分支,master而是为此功能使用Google Cloud Pubsub主题触发器。
我正在尝试根据本教程的指导为Python sklearn管道创建自定义转换器:http ://danielhnyk.cz/creating-your-own-estimator-scikit-learn/
现在,我的自定义类/变压器看起来像这样:
class SelectBestPercFeats(BaseEstimator, TransformerMixin):
def __init__(self, model=RandomForestRegressor(), percent=0.8,
random_state=52):
self.model = model
self.percent = percent
self.random_state = random_state
def fit(self, X, y, **fit_params):
"""
Find features with best predictive power for the model, and
have cumulative importance value less than self.percent
"""
# Check parameters
if not isinstance(self.percent, float):
print("SelectBestPercFeats.percent is not a float, it should be...")
elif not isinstance(self.random_state, int):
print("SelectBestPercFeats.random_state is not a int, it should be...")
# If checks are good proceed with …Run Code Online (Sandbox Code Playgroud) 在pyspark中,我有一个数据框,其中包含要作为字符串导入的日期。这些按字符串日期的列中有空值。我正在尝试将这些列转换为日期类型的列,但我不断收到错误消息。这是数据框的一个小示例:
+--------+----------+----------+
|DeviceId| Created| EventDate|
+--------+----------+----------+
| 1| null|2017-03-09|
| 1| null|2017-03-09|
| 1|2017-03-09|2017-03-09|
| 1|2017-03-15|2017-03-15|
| 1| null|2017-05-06|
| 1|2017-05-06|2017-05-06|
| 1| null| null|
+--------+----------+----------+
Run Code Online (Sandbox Code Playgroud)
当没有空值时,我发现下面的代码可用于转换数据类型:
dt_func = udf (lambda x: datetime.strptime(x, '%Y-%m-%d'), DateType())
df = df.withColumn('Created', dt_func(col('Created')))
Run Code Online (Sandbox Code Playgroud)
一旦添加空值,它就会崩溃。我试图修改udf以解决空值,如下所示:
import numpy as np
def convertDatetime(x):
return sf.when(x.isNull(), 'null').otherwise(datetime.strptime(x, '%Y-%m-%d'))
dt_func = udf(convertDatetime, DateType())
Run Code Online (Sandbox Code Playgroud)
我还尝试使用任意日期字符串填充null,将列转换为日期,然后尝试将null替换为任意填充日期,如下所示:
def dt_conv(df, cols, form = '%Y-%m-%d', temp_plug = '1900-01-01'):
df = df.na.fill(temp_plug)
dt_func = udf (lambda x: datetime.strptime(x, form), DateType())
for col_ in cols:
df …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一页或多页的PDF文件转换为每页的图像。这非常像这里的问题。实际上,我正在尝试使用该帖子中@Idan Yacobi的代码来完成此任务。他的代码如下所示:
import ghostscript
def pdf2jpeg(pdf_input_path, jpeg_output_path):
args = ["pdf2jpeg", # actual value doesn't matter
"-dNOPAUSE",
"-sDEVICE=jpeg",
"-r144",
"-sOutputFile=" + jpeg_output_path,
pdf_input_path]
ghostscript.Ghostscript(*args)
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,我从python得到以下输出:
##### 238647312 c_void_p(238647312L)
当我查看应该在其中创建新.jpg图像的文件夹时,那里有一个具有新名称的文件。但是,当我尝试打开文件时,图像预览显示“ Windows Photo Viewer无法打开该图片,因为该图片正在其他程序中进行编辑。”
似乎出于某种原因,Ghostscript打开了文件并写入了文件,但是在完成后没有关闭文件。我有什么办法可以强迫这种情况发生?还是我想念其他东西?
我已经尝试将上面的最后一行更改为下面的代码,以在完成后显式关闭ghostscript。
GS = ghostscript.Ghostscript(*args)
GS.exit()
Run Code Online (Sandbox Code Playgroud)