google cloud deploy ERROR: Could not find a version that satisfies the requirement

Viewed 144

I have an anaconda panel application, this works perfectly in the local environment, but when trying to deploy it with Google App Engine it's giving me errors.

this is the actual source location I modified this to the following

enter image description here

app.yaml

runtime: python
env: flex
entrypoint: panel serve app.py --address 0.0.0.0 --port 8080 --allow-websocket-origin="*"

runtime_config:
  python_version: 3.7

manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

app.py

import hvplot.pandas
import pandas as pd
import numpy as np
import panel as pn

pn.extension('tabulator')


# cache data to improve dashboard performance
if 'data' not in pn.state.cache.keys():

    df = pd.read_csv(
        'https://raw.githubusercontent.com/owid/co2-data/master/owid-co2-data.csv')

    pn.state.cache['data'] = df.copy()

else:

    df = pn.state.cache['data']

# Fill NAs with 0s and create GDP per capita column
df = df.fillna(0)
df['gdp_per_capita'] = np.where(
    df['population'] != 0, df['gdp'] / df['population'], 0)

# Make DataFrame Pipeline Interactive
idf = df.interactive()

# Define Panel widgets
year_slider = pn.widgets.IntSlider(
    name='Year slider', start=1750, end=2020, step=5, value=1850)
year_slider

# Radio buttons for CO2 measures
yaxis_co2 = pn.widgets.RadioButtonGroup(
    name='Y axis',
    options=['co2', 'co2_per_capita', ],
    button_type='success'
)

continents = ['World', 'Asia', 'Oceania', 'Europe',
              'Africa', 'North America', 'South America', 'Antarctica']

co2_pipeline = (
    idf[
        (idf.year <= year_slider) &
        (idf.country.isin(continents))
    ]
    .groupby(['country', 'year'])[yaxis_co2].mean()
    .to_frame()
    .reset_index()
    .sort_values(by='year')
    .reset_index(drop=True)
)

co2_plot = co2_pipeline.hvplot(
    x='year', by='country', y=yaxis_co2, line_width=2, title="CO2 emission by continent")

co2_table = co2_pipeline.pipe(
    pn.widgets.Tabulator, pagination='remote', page_size=10, sizing_mode='stretch_width')


co2_vs_gdp_scatterplot_pipeline = (
    idf[
        (idf.year == year_slider) &
        (~ (idf.country.isin(continents)))
    ]
    .groupby(['country', 'year', 'gdp_per_capita'])['co2'].mean()
    .to_frame()
    .reset_index()
    .sort_values(by='year')
    .reset_index(drop=True)
)

co2_vs_gdp_scatterplot = co2_vs_gdp_scatterplot_pipeline.hvplot(x='gdp_per_capita',
                                                                y='co2',
                                                                by='country',
                                                                size=80, kind="scatter",
                                                                alpha=0.7,
                                                                legend=False,
                                                                height=500,
                                                                width=500)


yaxis_co2_source = pn.widgets.RadioButtonGroup(
    name='Y axis',
    options=['coal_co2', 'oil_co2', 'gas_co2'],
    button_type='success'
)

continents_excl_world = ['Asia', 'Oceania', 'Europe',
                         'Africa', 'North America', 'South America', 'Antarctica']

co2_source_bar_pipeline = (
    idf[
        (idf.year == year_slider) &
        (idf.country.isin(continents_excl_world))
    ]
    .groupby(['year', 'country'])[yaxis_co2_source].sum()
    .to_frame()
    .reset_index()
    .sort_values(by='year')
    .reset_index(drop=True)
)

co2_source_bar_plot = co2_source_bar_pipeline.hvplot(kind='bar',
                                                     x='country',
                                                     y=yaxis_co2_source,
                                                     title='CO2 source by continent')

# Layout using Template
template = pn.template.FastListTemplate(
    title='World CO2 emission dashboard',
    sidebar=[pn.pane.Markdown("# CO2 Emissions and Climate Change"),
             pn.pane.Markdown("#### Carbon dioxide emissions are the primary driver of global climate change. It’s widely recognised that to avoid the worst impacts of climate change, the world needs to urgently reduce emissions. But, how this responsibility is shared between regions, countries, and individuals has been an endless point of contention in international discussions."),
             pn.pane.PNG('climate_day.png', sizing_mode='scale_both'),
             pn.pane.Markdown("## Settings"),
             year_slider],
    main=[pn.Row(pn.Column(yaxis_co2,
                           co2_plot.panel(width=700), margin=(0, 25)),
                 co2_table.panel(width=500)),
          pn.Row(pn.Column(co2_vs_gdp_scatterplot.panel(width=600), margin=(0, 25)),
                 pn.Column(yaxis_co2_source, co2_source_bar_plot.panel(width=600)))],
    accent_base_color="#88d8b0",
    header_background="#88d8b0",
)
# template.show()
template.servable()

Once I run gcloud app deploy this error came:

enter image description here

enter image description here

Then I downgraded in requirements.txt

panel==0.12.0
bokeh==2.3.3
hvplot==0.7.2
aiohttp==3.8.1
aiosignal==1.2.0
async-timeout==4.0.2
attrs==21.4.0
backports.entry-points-selectable==1.1.1
base58==2.1.1
bitarray==1.2.2
cached-property==1.5.2
certifi==2021.10.8
charset-normalizer==2.0.10
click==8.0.3
colorama==0.4.4
commonmark==0.9.1
cytoolz==0.11.2
distlib==0.3.4
eth-abi==2.1.1
eth-account==0.5.7
eth-hash==0.3.2
eth-keyfile==0.5.1
eth-keys==0.3.4
eth-rlp==0.2.1
eth-typing==2.3.0
eth-utils==1.10.0
filelock==3.4.0
frozenlist==1.2.0
haralyzer==2.0.0
hexbytes==0.2.2
idna==3.3
ipfshttpclient==0.8.0a2
jsonschema==3.2.0
lru-dict==1.1.7
multiaddr==0.0.9
multidict==5.2.0
netaddr==0.8.0
numpy==1.21.6
pandas==1.3.5
parsimonious==0.8.1
pipenv==2021.11.23
pipenv-poetry-migrate==0.2.0
platformdirs==2.4.0
polygonscan-python==1.0.2
protobuf==3.19.4
pycryptodome==3.13.0
Pygments==2.11.2
pyrsistent==0.18.1
python-dateutil==2.8.2
python-dotenv==0.20.0
pytz==2022.1
requests==2.27.1
rich==9.13.0
rlp==2.0.1
six==1.16.0
tomlkit==0.10.1
toolz==0.11.2
typing-extensions==3.10.0.2
uniswap-python==0.5.5
urllib3==1.26.8
varint==1.0.2
virtualenv==20.10.0
virtualenv-clone==0.5.7
web3==5.26.0
websockets==9.1
yarl==1.7.2

Then ended up with not available polygonscan-python==1.0.2

enter image description here

Is there any way to upload these packages into Google Cloud, without downloading like this, how to solve this?

1 Answers

The version of numpy you first tried to use, and the polygonscan-python package require Python3.8. Your GAE Flex environment is built for Python3.7, so pip can't install these packages without meeting the requirements.

Unfortunately, the base Python Docker image that can be used in GAE Flex only supports up to Python 3.7.. So, your application can't run as you have set it up.

GAE Standard, however, supports the latest Python runtime (3.10). I tested deploying your app in the Standard environment and could get it running. Let me know if this was useful.

Related