Python中import导入模块的问题请教

是这样的,想做一个中文名生成工具。

Toolbox
  |--cn_name.json
  |--g.py

其中 cn_name.json 是我根据大量真人姓名提取出的特征数据,包括使用频次、性别倾向、用于中间字还是尾字等等。
然后 g.py 里打开上述 json 文件,并执行生成。


然后在B 路径的其它文件中,我

sys.path.append(root)
from Toolbox.g import ChineseName

,运行后会提示当前目录下没有 cn_name.json ,我理解它是在B 路径下找不到这个 json,但这到底该用啥姿势载入啊?


我是美工,各位多担待。


Python中import导入模块的问题请教

4 回复

因为“打开文件”这个操作并不是按照 sys.path 来找的,而是只有当前路径。导入模块才会在 sys.path 里查找。

import os.path
here = os.path.abspath(os.path.dirname(file))
json_path =os.path.join(here, ‘cn_name.json’)


在Python里import导入模块,核心就几个事儿:路径、顺序和命名空间。

1. 导入方式:

  • import module:导入整个模块,用的时候得module.func()
  • from module import func:导入特定函数,直接func()就能用
  • from module import *:全导入,容易命名冲突,不推荐
  • import module as alias:起别名,解决长模块名或冲突

2. 搜索路径: Python按这个顺序找模块:

  1. 当前目录
  2. PYTHONPATH环境变量里的路径
  3. 标准库目录
  4. 第三方包目录(site-packages)

import sys; print(sys.path)能看到搜索路径。

3. 常见坑:

  • 循环导入:A导B,B又导A,容易出错
  • 相对导入:在包内用.,比如from .submodule import func
  • __init__.py:Python 3.3+里不是必须的,但显式定义包结构时还是建议有
  • 命名冲突:自己写的模块别跟标准库重名

4. 动态导入: 需要时才导入,用importlib

import importlib
module = importlib.import_module('module_name')

5. 包结构示例:

my_package/
    __init__.py
    module_a.py
    subpackage/
        __init__.py
        module_b.py

导入时:from my_package.subpackage import module_b

总结: 保持导入清晰,避免循环引用。

g.py 里这样获取 cn_name.json 的路径:
toolbox_path = os.path.dirname(os.path.abspath(file))
cn_name_path = os.path.join(toolbox_path, “cn_name.json”)

搞定了 感谢两位

回到顶部