我正在尝试 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
如果您总是想从其文件夹外部使用您的包,您可以简单地将
import api_keys
替换为 from apis import api_keys
或 from . import api_keys
。
否则,您可以将
apis
添加到 PYTHONPATH
环境变量,以便可以在该文件夹内搜索模块,而无需知道脚本从哪里运行。