Python 3.x 在_init__; py.py中的google.cloud命名空间导入错误

Python 3.x 在_init__; py.py中的google.cloud命名空间导入错误,python-3.x,google-cloud-platform,python-import,google-secret-manager,Python 3.x,Google Cloud Platform,Python Import,Google Secret Manager,我已经阅读了至少十几个不同的stackoverflow问题,这些问题都呈现出相同的基本问题,并且有相同的基本答案:要么模块安装不正确,要么OP导入错误 在本例中,我尝试从google.cloud import secretmanager\u v1beta1执行 当我运行气流dag或运行pytest tests/dags/test\u my_dag.py时,它在我的气流容器中工作。但是,如果我运行cddags;python-m my_dag或cd dag;python my_dag.py我收到以下

我已经阅读了至少十几个不同的stackoverflow问题,这些问题都呈现出相同的基本问题,并且有相同的基本答案:要么模块安装不正确,要么OP导入错误

在本例中,我尝试从google.cloud import secretmanager\u v1beta1执行

当我运行
气流dag
或运行
pytest tests/dags/test\u my_dag.py
时,它在我的气流容器中工作。但是,如果我运行
cddags;python-m my_dag
cd dag;python my_dag.py
我收到以下错误:

from google.cloud import secretmanager as secretmanager
ImportError: cannot import name 'secretmanager' from 'google.cloud' (unknown location)
我可以从google.cloud导入bigquery中添加
,就在这一行的正上方,这样就可以了。从字面上看,这似乎只是一个问题,这个特殊的包

pytest和airflow命令成功与否有什么关系?因为,在另一个环境中,我试图从命令行运行数据流作业,但我遇到了相同的错误。不幸的是,出于几个原因,我认为我无法在那种环境中绕过这个错误

更新6

我已经将错误缩小为
google.cloud
名称空间和
secretmanager
文件中该名称空间内的
\uuuu init\uuuuu.py
包的问题

如果我将
从google.cloud import secretmanager添加到
aiffort/dags/\uu init\uuuuuuuuuuupy
,然后尝试运行
python-m dags.my\u dag.py
,我会收到此错误,但堆栈跟踪略有不同:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/runpy.py", line 183, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/usr/local/lib/python3.7/runpy.py", line 109, in _get_module_details
    __import__(pkg_name)
  File "/workspace/airflow/dags/__init__.py", line 3, in <module>
    from google.cloud import secretmanager
ImportError: cannot import name 'secretmanager' from 'google.cloud' (unknown location)
更新

根据评论中的要求,以下是
requirements.txt
的内容:

boto3>=1.7.84
google-auth==1.11.2
google-cloud-bigtable==1.2.1
google-cloud-bigquery==1.24.0
google-cloud-spanner==1.14.0
google-cloud-storage==1.26.0
google-cloud-logging==1.14.0
google-cloud-secret-manager>=0.2.0
pycloudsqlproxy>=0.0.15
pyconfighelper>=0.0.7
pymysql==0.9.3
setuptools==45.2.0
six==1.14.0
我在上面的pip和python安装命令示例中意外地省略了
--user
标志。在我的容器环境中,使用全局
站点包
目录中的
--user
NOT将所有内容安装到用户的主目录中

更新2

我已将以下代码添加到生成错误的文件中:

print('***********************************************************************************')
import sys
print(sys.path)
from google.cloud import secretmanager_v1beta1 as secretmanager
print('secretmanager.__file__: {}'.format(secretmanager.__file__))
气流列表\u dags

['/home/app/.local/bin', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/home/app/.local/lib/python3.7/site-packages', '/home/app/.local/lib/python3.7/site-packages/Jeeves-0.0.1-py3.7.egg', '/home/app/.local/lib/python3.7/site-packages/google_cloud_secret_manager-0.2.0-py3.7.egg', '/home/app/.local/lib/python3.7/site-packages/pyconfighelper-0.0.7-py3.7.egg', '/home/app/.local/lib/python3.7/site-packages/click-7.1.1-py3.7.egg', '/workspace/airflow', '/usr/local/lib/python3.7/site-packages', '/workspace/airflow/dags', '/workspace/airflow/config', '/workspace/airflow/plugins']
secretmanager.__file__: /home/app/.local/lib/python3.7/site-packages/google_cloud_secret_manager-0.2.0-py3.7.egg/google/cloud/secretmanager_v1beta1/__init__.py
python my_dag.py

['/workspace/airflow/dags', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/home/app/.local/lib/python3.7/site-packages', '/home/app/.local/lib/python3.7/site-packages/Jeeves-0.0.1-py3.7.egg', '/home/app/.local/lib/python3.7/site-packages/google_cloud_secret_manager-0.2.0-py3.7.egg', '/home/app/.local/lib/python3.7/site-packages/pyconfighelper-0.0.7-py3.7.egg', '/home/app/.local/lib/python3.7/site-packages/click-7.1.1-py3.7.egg', '/home/app/.local/lib/python3.7/site-packages/icentris_ml_airflow-0.0.0-py3.7.egg', '/usr/local/lib/python3.7/site-packages']
更新3
树木气流/dags

airflow/dags
├── __init__.py
├── __pycache__
│   ├── __init__.cpython-37.pyc
│   ├── bq_to_cs.cpython-37.pyc
│   ├── bq_to_wrench.cpython-37.pyc
│   ├── fetch_cloudsql_tables-bluesun.cpython-37.pyc
│   ├── fetch_cloudsql_tables.cpython-37.pyc
│   ├── fetch_app_tables-bluesun.cpython-37.pyc
│   ├── fetch_app_tables.cpython-37.pyc
│   ├── gcs_to_cloudsql.cpython-37.pyc
│   ├── gcs_to_s3.cpython-37.pyc
│   ├── lake_to_staging.cpython-37.pyc
│   ├── schedule_dfs_sql_to_bq-bluesun.cpython-37.pyc
│   ├── schedule_dfs_sql_to_bq.cpython-37.pyc
│   ├── app_to_bq_initial_load-bluesun.cpython-37.pyc
│   ├── app_to_lake-bluesun.cpython-37.pyc
│   └── app_to_lake.cpython-37.pyc
├── bq_to_wrench.py
├── composer_variables.json
├── my_ml_airflow.egg-info
│   ├── PKG-INFO
│   ├── SOURCES.txt
│   ├── dependency_links.txt
│   └── top_level.txt
├── lake_to_staging.py
├── libs
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-37.pyc
│   │   ├── checkpoint.cpython-37.pyc
│   │   └── utils.cpython-37.pyc
│   ├── checkpoint.py
│   ├── io
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   └── __init__.cpython-37.pyc
│   │   └── gcp
│   │       ├── __init__.py
│   │       ├── __pycache__
│   │       │   ├── __init__.cpython-37.pyc
│   │       │   └── storage.cpython-37.pyc
│   │       └── storage.py
│   ├── shared -> /workspace/shared/
│   └── utils.py
├── requirements.txt
├── table_lists
│   └── table-list.json
└── templates
    └── sql
        ├── lake_to_staging.contacts.sql
        ├── lake_to_staging.orders.sql
        └── lake_to_staging.users.sql

11 directories, 41 files
更新4

我尝试修复它,使
sys.path
在运行
python dags/my_dag.py
时看起来与运行
aiffair list\u dags
pytest\u my_dag.py
时一样

仍然会得到相同的错误

查看最新版本的文档,我注意到您应该可以从google.cloud import secretmanager
执行
。这给了我同样的结果(适用于airflow和pytest,而不是尝试直接运行时)


在这一点上,我最好的猜测是它与名称空间魔法有关,但我不确定?

经过多次尝试和错误,问题是如果以前没有从google.cloud导入另一个包,当前无法从google.cloud名称空间导入secretmanager

mod.py

from google.cloud import secretmanager # Fails with error
mod2.py

from google.cloud import bigquery
from google.cloud import secretmanager # Works because the first import initialized the namespace

它必须通过终端安装:
pip安装googlecloudsecretmanager

因为包名不是secretmanager,而是google cloud secret manager

您的
requirement.txt
文件的内容是什么?请尝试
pip安装-U google cloud secret manager
。将
google cloud secret manager==0.2.0
添加到requirements.txt。请在添加其他信息时留下评论,我们不会收到编辑通知。在一个有效的方法中,什么是
secretmanager.\uu文件\uu
?在一个没有,什么是
sys.path
?@DustinIngram更新发布根据您的评论。谢谢
from google.cloud import bigquery
from google.cloud import secretmanager # Works because the first import initialized the namespace