main.py 无法读取其他模块内部调用的模块

问题描述 投票:0回答:1

我正在尝试 Google 的 geo API,并尝试尊重良好实践,我尝试将 api 密钥放入文件中,以使其不出现在我的 GitHub 存储库中 (

api_keys.py
)。

coordinates_api.py
使用
api_keys.py
调用
import api_keys
来检索密钥并调用 API,并且在测试
coordinates_api.py
时一切正常,我按照预期打印了坐标。

当我测试

main.py
并调用
coordinates_api.py
时,我收到错误:

Traceback (most recent call last):
  File "c:\Users\me\Documents\Projects\Git\ProjectName\src\main.py", line 1, in <module>
    from apis import *
  File "c:\Users\me\Documents\Projects\Git\ProjectName\src\apis\coordinates_api.py", line 2, in <module>
    import api_keys
ModuleNotFoundError: No module named 'api_keys'

我不明白为什么我的

api_keys
模块不被
main.py

识别

这是

coordinates_api.py
的代码:

import requests
import api_keys

class CoordinatesAPI:
    def __init__(self, api_key=None):
        self.api_key = api_keys.geo

    def get_coordinates(self, address):
        base_url = "https://maps.googleapis.com/maps/api/geocode/json"
        params = {
            "address": address,
            "key": self.api_key
        }
        response = requests.get(base_url, params=params)
        if response.status_code == 200:
            data = response.json()
            if data['status'] == 'OK':
                location = data['results'][0]['geometry']['location']
                return location['lat'], location['lng']
            else:
                raise Exception(f"Error from API: {data['status']}")
        else:
            raise Exception(f"HTTP error: {response.status_code}")

对于

main.py

from apis import coordinates_api

if __name__ == "__main__":
    address = "1600 Amphitheatre Parkway, Mountain View, CA"
    CA1 = coordinates_api.CoordinatesAPI()
    lat, lng = CA1.get_coordinates(address)
    print(f"Latitude: {lat}, Longitude: {lng}")

(在这里我也尝试了一下导入,但也例如

from apis import *
给出了相同的错误。我不想进行反复试验,而是想正确理解我在这里缺少的内容)

这就是我的树的样子:

│   main.py
│
├───apis
│   │   api_keys.py
│   │   coordinates_api.py
│   │   __init__.py
python module package
1个回答
0
投票

如果您总是想从其文件夹外部使用您的包,您可以简单地将

import api_keys
替换为
from apis import api_keys
from . import api_keys

否则,您可以将

apis
添加到
PYTHONPATH
环境变量,以便可以在该文件夹内搜索模块,而无需知道脚本从哪里运行。

© www.soinside.com 2019 - 2024. All rights reserved.