跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请问 Python 怎么导入同目录下的 py 文件?
未分類
30 9 月 2020

请问 Python 怎么导入同目录下的 py 文件?

请问 Python 怎么导入同目录下的 py 文件?

資深大佬 : CenN 0

新手小白,一直没解决这个问题。

比如我的目录如下:

请问 Python 怎么导入同目录下的 py 文件?

怎么在createData.py中导入utils.py呢?

大佬有話說 (24)

  • 資深大佬 : matrix67

    pycharm 里面直接打函数,下面会有一条红色的线,alter+ enter

  • 資深大佬 : ruanimal

    大哥看下书吧,了解下 “包”和“模块的概念”

    =========

    简单来说,在 preprocessing 文件夹,新建一个__init__.py 文件

  • 主 資深大佬 : CenN

    @matrix67 Pycharm 写的是`from preprocessing.utils import xxx`,在 Pycharm 中是可以用的,但是我这个最终是放到服务器上的,在服务器上就提示错误。
    “`
    Traceback (most recent call last):
    File “createData.py”, line 4, in <module>
    from preprocessing.utils import process
    ModuleNotFoundError: No module named ‘preprocessing’
    “`

  • 主 資深大佬 : CenN

    @ruanimal 我也是试了很多种方法才来问的,你这样不行。

  • 資深大佬 : ruanimal

    https://docs.python.org/zh-cn/3/tutorial/modules.html

  • 資深大佬 : ruanimal

    @CenN 有几个点你得确认, 看文档很重要大哥
    1. 程序的执行入口: 应该是 train.py
    2. 程序的工作目录: 应该是项目根目录, 也就是 python train.py
    3. import 的方式: from .utils import xxx 或者 from preprocessing.utils import xxx
    4. __init__.py

  • 主 資深大佬 : CenN

    @ruanimal 感谢,解决了。

  • 主 資深大佬 : CenN

    @ruanimal
    用 from utils import process 解决了

  • 資深大佬 : ruanimal

    可以看看这两篇

    http://ponder.work/2016/04/25/Python%E5%8C%85%E5%AF%BC%E5%85%A5/

    http://ponder.work/2016/06/22/python%E5%8C%85%E5%AF%BC%E5%85%A5%E5%86%8D%E8%B0%88/

  • 資深大佬 : BBCCBB

    好像是推荐用 from .utils import xxx 这种方式.

    from utils import xxx 这种, 如果全局有 utils 模块, 就会有冲突, 导致错误.

    你看看 python 的相对导入.

  • 資深大佬 : zone10

    假设你的包结构是这样的:

    “`bash
    /preprocessing
    __init__.py
    createData.py
    utils.py
    “`

    如果你在 `preprocessing` 目录内运行 `createData.py`, 那么不管是 `from preprossing.utils import xxx` 还是 `from .utils import xxx` 都是不能运行的, 只能在 `preprocessing` 目录外运行 `python preprocessing/createData.py`, 或者改成 `from utils import xxx`

  • 主 資深大佬 : CenN

    @BBCCBB 使用 .utils 无法在服务器上运行啊

  • 主 資深大佬 : CenN

    createData 是处理数据,train 是训练模型的。
    我想在 Pycharm 上用小数据量调试看看程序有没有错,然后放到服务器上执行。
    所以想要在两个地方都能运行。
    用 from utils import xxx 导入
    在 Pycharm 上将 preprocessing 设为 source root
    这样两个地方都能运行了

  • 資深大佬 : ruanimal

    @CenN 但是你这样在服务器实际跑脚本还是会错

  • 主 資深大佬 : CenN

    @ruanimal 在 preprocessing 下运行 createData 没出错啊

  • 資深大佬 : no1xsyzy

    你是 cd 进 preprocessing 直接运行 python createData.py 了吧……
    不然库发现不可能发现 utils

  • 主 資深大佬 : CenN

    @no1xsyzy python preprocessing/createData 也没问题

  • 資深大佬 : BBCCBB

    有个 python -m 的命令. 看看能解决不.

  • 資深大佬 : dobest

    还是一个 relative import 的问题,__name__ == ‘__main__’ 时,是没有包信息的,所以用 .mypackage import XX 会出错,可以在目录外执行 python -m mytrain.createData 或加入路径信息 。
    可以参考 SO 的这个问题

    https://stackoverflow.com/questions/16981921/relative-imports-in-python-3

  • 資深大佬 : laike9m

    取决于你是怎么调用和运行的

  • 資深大佬 : ruanimal

    @CenN 如果 train 文件 想用 preprocessing 里面的函数,就会出错

  • 資深大佬 : XDy0

    我前段时间刚开始用 python 也遇到了这个问题,后来在项目结构上面做了点手脚,自己起个文件夹叫 lib,包都装进去,引入的时候就是 from lib.xxxxxx 。但是还是不能很好地解决那种 lib 里面的模块需要调用环境的模块的

  • 資深大佬 : imn1

    如果建了一个空的 __init__.py
    就用
    from . import 文件名
    from .文件名 import 类|函数

    没有 init 文件,就不需要句点
    import 文件名

  • 資深大佬 : cgwh

    import .xxxxx
    就行了啊!

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具