我正在尝试运行使用各种依赖项的程序,但自从升级到 Python 3.10 后,这不再起作用。当我在终端中运行“python3”并从那里导入我的依赖项时,出现错误:
ImportError: cannot import name 'Mapping' from 'collections' (/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/collections/__init__.py)
Run Code Online (Sandbox Code Playgroud)
这似乎是一个普遍问题,但这是我的具体案例的回溯:
Traceback (most recent call last):
File "/Users/mk/Flasktut/app.py", line 2, in <module>
from flask import Flask, render_template
File "/Users/mk/Flasktut/env/lib/python3.10/site-packages/flask/__init__.py", line 14, in <module>
from jinja2 import escape
File "/Users/mk/Flasktut/env/lib/python3.10/site-packages/jinja2/__init__.py", line 33, in <module>
from jinja2.environment import Environment, Template
File "/Users/mk/Flasktut/env/lib/python3.10/site-packages/jinja2/environment.py", line 16, in <module>
from jinja2.defaults import BLOCK_START_STRING, \
File "/Users/mk/Flasktut/env/lib/python3.10/site-packages/jinja2/defaults.py", line 32, in <module>
from jinja2.tests import TESTS as DEFAULT_TESTS
File "/Users/mk/Flasktut/env/lib/python3.10/site-packages/jinja2/tests.py", line 13, in <module>
from …Run Code Online (Sandbox Code Playgroud) 尝试安装程序 ( pip install -r requirements.txt) 的要求时,pip 失败并显示以下完整输出:
superadmin@diskstation:/volume1/scripts/movies/trakt.plex.scripts-master$ sudo /volume1/@appstore/py3k/usr/local/bin/pip3 install -r requirements.txt
Password:
Collecting astroid==2.3.2
Using cached astroid-2.3.2-py3-none-any.whl (205 kB)
Collecting certifi==2019.9.11
Using cached certifi-2019.9.11-py2.py3-none-any.whl (154 kB)
Collecting chardet==3.0.4
Using cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)
Collecting idna==2.8
Using cached idna-2.8-py2.py3-none-any.whl (58 kB)
Collecting isort==4.3.21
Using cached isort-4.3.21-py2.py3-none-any.whl (42 kB)
Requirement already satisfied: lazy-object-proxy==1.4.2 in /volume1/@appstore/py3k/usr/local/lib/python3.5/site-packages (from -r requirements.txt (line 6)) (1.4.2)
Collecting mccabe==0.6.1
Using cached mccabe-0.6.1-py2.py3-none-any.whl (8.6 kB)
Collecting oauthlib==3.1.0
Using cached oauthlib-3.1.0-py2.py3-none-any.whl (147 kB)
Processing /root/.cache/pip/wheels/03/22/4e/8993c46d8cbb81c71115a39595162be5ff7193c1810afd4ce2/PlexAPI-3.2.0-py3-none-any.whl
Collecting …Run Code Online (Sandbox Code Playgroud) 从PEP 563来看,似乎应该有轻微的性能提升,因为它解决了
类型提示在模块导入时执行,这在计算上不是免费的。
那么...我是否可以/应该将其包含from __future__ import annotations在包中的每个文件中,或者是否有任何原因应将其从某些文件中排除?
每当我重新启动pycharm它时,Querying skeleton update即使我没有更改/修改或更新我的任何python库,也会在后台启动进程.我使用Anaconda 5.0作为我的默认设置,并且只在系统上安装了python版本.
由于这个过程,pycharm启动应用程序后最初响应需要很长时间.
当没有对python库进行任何更改或者我必须禁用它时,是否有任何设置不运行此更新.
我缺少任何设置或更改吗?
我还附加了生成的日志文件.
编辑:
问题还是一样用2017.3.1,2018版本Pycharm的.
我正在尝试通过 Pandas 将表附加到不同的表,从 BigQuery 中提取数据并将其发送到不同的 BigQuery 数据集。虽然表架构完全相同,但我收到错误““请验证结构和“pandas_gbq.gbq.InvalidSchema:请验证数据帧中的结构和数据类型是否与目标表的架构匹配。”
这个错误发生在我之前去覆盖表的地方,但在这种情况下,数据集太大而无法做到这一点(这不是一个可持续的解决方案)。
df = pd.read_gbq(query, project_id="my-project", credentials=bigquery_key,
dialect='standard')
pd.io.gbq.to_gbq(df, dataset, projectid,
if_exists='append',
table_schema=[{'name': 'Date','type': 'STRING'},
{'name': 'profileId','type': 'STRING'},
{'name': 'Opco','type': 'STRING'},
{'name': 'country','type': 'STRING'},
{'name': 'deviceType','type': 'STRING'},
{'name': 'userType','type': 'STRING'},
{'name': 'users','type': 'INTEGER'},
{'name': 'sessions','type': 'INTEGER'},
{'name': 'bounceRate','type': 'FLOAT'},
{'name': 'sessionsPerUser','type': 'FLOAT'},
{'name': 'avgSessionDuration','type': 'FLOAT'},
{'name': 'pageviewsPerSession','type': 'FLOAT'}
],
credentials=bigquery_key)
Run Code Online (Sandbox Code Playgroud)
BigQuery 中的架构如下:
Date STRING
profileId STRING
Opco STRING
country STRING
deviceType STRING
userType STRING
users INTEGER
sessions INTEGER
bounceRate FLOAT
sessionsPerUser FLOAT
avgSessionDuration FLOAT …Run Code Online (Sandbox Code Playgroud) 我正在尝试找到与 C++const方法等效的 Python 方法。也就是说,禁止更改其类的任何数据成员的方法。
from typing import Final
age: Final = 2
age += 3 # <----- warn about this -- works!
class Person:
def __init__(self, age: int) -> None:
self.age = age
def happy_birthday(self: Final[Person]) -> None:
self.age += 1 # <----- warn about this -- how?
Run Code Online (Sandbox Code Playgroud)
我从未见过使用过类型提示self,所以它看起来有点奇怪(并且不起作用)
main.py:4: error: Cannot assign to final name "age"
main.py: note: In member "happy_birthday" of class "Person":
main.py:9: error: Final can be only used as …Run Code Online (Sandbox Code Playgroud) 如果我需要打印一个换行符,那么编写print语句的Pythonic方法是什么?我正在教Python人,我想第一次就做好.
我发现最有可能的两种方式是:
__PRE__
优点:
缺点:
由于没有提到\n,可能性较差
依赖于最终是一个新行,这可能不是天生就是明显的
__PRE__
优点:
缺点:
更长
正在学习的人可能不知道"结束"论证的含义
我正在构建一个包含要运行的脚本的包。它们导入脚本正下方的子文件夹中包含的模块。既然__init__Python 3.3 之后就不需要了,那么正确的文件结构和import语句是什么?我不想指定从最顶层文件夹向下的导入,仅作为相对路径,在这里sub/module。
这是文件结构的当前状态:
Root\
src\
sub\
module.py
script.py
parent_module.py
setup.py
# Inside script.py
import sub.module # Doesn't work
from sub import module # Doesn't work
import src.sub.module # Does work!
import .sub.module # Doesn't work
import .parent_module # Does work!
Run Code Online (Sandbox Code Playgroud)
我想我需要一些 __init__文件,但是那是什么文件,在哪里呢?非常感谢任何帮助,我对包装不太了解。
另外,我当然愿意接受改变结构的建议,如果这能让事情变得更容易的话。
我该如何解决这个错误。它会在运行程序时生成。
from bson import ObjectId
class JSONEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, ObjectId):
return str(o)
return json.JSONEncoder.default(self, o)
Run Code Online (Sandbox Code Playgroud) 我想通过 [PyFlakes, Pylint] 和 mypy 获得正确的 linting 和类型提示。
例如,在下面的代码中,我们无法得到最后一行的类型错误。我们甚至不知道是否float_input存在。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--float_input', type=float)
args = parser.parse_args()
def int_sum(a: int, b: int):
return a + b
c = int_sum(args.float_input, args.float_input)
Run Code Online (Sandbox Code Playgroud)
有没有什么好的方法可以改善这个问题呢?
python ×8
python-3.x ×4
mypy ×2
type-hinting ×2
anaconda ×1
annotations ×1
constants ×1
importerror ×1
io ×1
newline ×1
package ×1
pandas ×1
pycharm ×1
pylint ×1
python-3.10 ×1
readability ×1
synology ×1