python import/package

示例project

https://github.com/harryhare/python_import_playground

在不涉及包的情况下,引用其他文件

直接 import 文件路径就可以

  • 包和普通目录的区别只是包多了个__init__.py 文件。

  • 有了这个文件后,在import 时则可以用目录名,而不是直接引用文件名。

  • 同时 import 后,只有__init__.py 文件中定义/import的东西才能在包外被引用,有点封装/头文件的意思。

  • 所以如果package 路径下有其他文件,

  • 一个办法是在 __init__.py import 这些文件;

  • 另一个办法是 __all__=["pyfile_name","function_name","varible_name"]

  • __all__只对 from xxx import * 形式的import 有效

  • 如果没有定义__all__ 则文件__init__.py中的所有都对外可见。如果定义了,则只有在列表中出现的对外可见

运行

  • PyCharm

    • 右键标记根目录是source root, 然后import 后面的路径要从这个 source root 起的路径
    • 自建package 只要 引用对了就可以。
    • 依赖库 由于和python 的环境变量绑定,所以只要设置好 python的编译环境即可。
  • 命令行

    • 如果入口脚本在外层,也就是 source root 下面,那么直接运行即可
    • 如果脚本入口不直接在 source root 下面,设置环境变量 PYTHONPATH 为 source root

和其他语言比较

Go
  • 目录名 是 package name 和 python 很像
  • 文件中大写字母开头的包外可以访问 (python 是 init.py中的包外可以访问)
运行
  • golang 在不使用 go module 的情况下,源码和依赖库一起被放在 GOPATH 下面
    也就是 依赖库和源码在相同的位置。

  • 在 使用 go module 后, 源码可以不在 GOPATH 下面,GOPATH 只是依赖库所在的位置。

C/C++
  • 没有 package 概念

  • 又 namespace 和 头文件

  • C 的依赖库是由 静态库/动态库/头文件三部分组成,所以这里只考虑直接和代码相关的头文件。

  • 我们都知道 #include 有两种方式,

    • #include <stdio.h>

    • #include "mytest.h"

    • 第一种先查找系统路径,第二种先在本地路径下查找文件

    • 同时,头文件的目录也可以在编译时指定,所以比较下来C 是最灵活的

    • 不过,mess up 系统路径,可能导致各种奇怪的问题,似乎并且没有版本管理系统

运行
  • 需要链接时指定静态库和动态库
  • 如果是动态库,运行时则需要能访问动态库文件 .dll / .so

参考

1.https://www.cnblogs.com/yinzhengjie/p/8587656.html

2.https://www.jianshu.com/p/ca469f693c31

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值