python import自定义工具包

前言

自己开发了一个工具包,名字叫 mypackage。
位于 /mnt/develop/mypackage/。

需要在不同层级都能引用。
如果在顶级目录运行显然可以import,因为默认cwd会进入sys.path。
但是永远在顶级目录运行是不现实的。

四处看了一下解决方案。

核心就是能让import搜索到这个包。

下面对比一下各种解决方案的优劣。

1. 系统变量sys.path

每次运行某个.py时,先获取当前的

dir = os.getcwd()
或者
dir = __file__路径。
然后 sys.path.append(dir)。

2. 环境变量pythonpath

用shell脚本设置环境变量PYTHONPATH
该环境变量会自动添加到sys.path属性.

vim ~/.bashrc

添加内容

export PYTHONPATH=$PYTHONPATH:/mnt/develop/

保存退出。

本次需要手动source,以后都能自动引用。

3. setuptools 打包+ pip install 安装

https://www.jianshu.com/p/e7e989eeb52f

这个很不方便啊,自己的包改一下就得重新打包安装,怕不是傻子。

4. 模拟安装到第三方包 site-packages目录下

.pth 文件

Python 在遍历已有的库文件目录(sys.path中指定)过程中,如果见到一个 .pth 文件,就会将该文件中所记录的路径加入到 sys.path 设置中

由于sys.path默认会包含 /lib/site-packages/,所以在这个目录下添加.pth就会被自动搜索到。

https://www.cnblogs.com/ibingshan/p/11082510.html
@ibingshan: 该文件位于 python 的 /Lib/site-packages 目录下,可以有多个。
在 .pth 文件中可以把其它目录添加到 sys.path 中,可以是相对路径和绝对路径。
相对路径以 /Lib/site-packages 为基目录。
在 .pth 文件中,有个变量 sitedir,这个变量代表 /Lib/site-packages 的绝对路径
在 .pth 文件中,还可以添加 python 代码,注意的是完整的代码要在一行当中,分号分割命令,而且要以 import 开头。

以我的举例

cd /home/wqliu/anaconda3/envs/myenv/lib/python3.9/site-packages
vim my.pth

添加内容

/mnt/develop/mypackage/

vim保存退出即可。

再测试一下

python
import sys
print(sys.path)

就能看到目录/mnt/develop/被添加到sys.path中了。

import mypackage

这次不会报错。

需要注意的是,我突发奇想,既然cwd会自动进入sys.path,在cwd下加入.pth会不会也有效呢。
经过测试无效…貌似不会扫描cwd。
或者扫描.pth的步骤,先于把cwd加入sys.path的步骤。

总结下来
2 pythonpath和 4 .pth方法最实用。

你可能感兴趣的:(python,python,开发语言,后端)