小编Jed*_*Jed的帖子

在 Google Cloud Function 中访问用户定义的包(ModuleNotFoundError: No module named...)

我正在从源代码库部署 Google Cloud 函数。只要我没有在我main.py的存储库中对我的任何用户定义函数(即除 之外的任何一个packagepackage2以下的脚本/函数)进行任何引用,我就可以使 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.pyrequirements.txt位于一个包中,我以该包作为源部署 Google Cloud Function。现在的问题是我需要能够访问其他包/脚本中的函数/脚本。如果我from package.script1 import foomain.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

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

Google Cloud Function - ImportError:无法从“google.cloud”(未知位置)导入名称“pubsub”

我正在部署一个谷歌云函数,它将启动其他谷歌云函数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

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

指定主机时,FastAPI/uvicorn 不起作用

我在 Windows 机器上使用 uvicorn 在 Python 中运行 FastAPI 应用程序。当我要么

  1. 在我的 mac 上运行以下代码,或者
  2. 当我没有为 uvicorn 指定端口时(host从 uvicorn.run 调用中删除参数)
  3. 当我指定端口“127.0.0.1”时,这是我根本不指定主机时它使用的主机。
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”时,如何使其工作?

python windows localhost fastapi uvicorn

6
推荐指数
2
解决办法
8690
查看次数

Uvicorn 不会用 CTRL+C 退出

我有一个使用 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 进程并保持终端仍在运行?

sigterm docker uvicorn

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

Google Cloud Function-函数加载错误:预期用于定义函数的文件main.py不存在

我正在尝试实现基于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功能中的设置如下所示:

Google Cloud功能编辑窗口屏幕截图

我试图将main.py移至项目中的另一个目录,并将“带有源代码的目录”设置为该目录,但这给了我一个错误,提示它找不到该目录。有建设性的想法吗?

编辑/其他信息

我使用的不是我的存储库中的分支,master而是为此功能使用Google Cloud Pubsub主题触发器。

python git google-cloud-functions

5
推荐指数
2
解决办法
3246
查看次数

自定义sklearn管道转换器,提供“ pickle.PicklingError”

我正在尝试根据本教程的指导为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)

python customization pipeline pickle scikit-learn

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

Python:如果存在空值,如何将Pyspark列转换为日期类型

在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)

python null date apache-spark pyspark

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

python ghostscript不关闭输出文件

我正在尝试将一页或多页的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)

python pdf jpeg ghostscript

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