Python学习之——测试环境路径的工程示例

Python学习之——测试环境路径的工程示例

  • Python环境路径
  • 几点小结
  • 一个工程示例

Python环境路径

参考: Python模块导入与路径管理
1.对于一个纯Python工程, 在 import模块时,Python解释器的搜索顺序是先搜索built-in模块,然后搜索 sys.path这个路径列表中的模块

sys.path这个路径列表依次存放着:当前脚本路径,PYTHONPATH路径,虚拟环境路径,site-packages路径

2.__file__ 属性储存着当前执行文件的绝对路径,sys.path 中储存着搜索路径,并且sys.path[0]中存着调用python解释器的脚本所在的目录,即sys.path[0]等价于__file__。

# 获取当前文件的绝对路径
os.path.abspath(__file__) 
# 返回当前文件所在的目录
os.path.dirname(__file__) 
# 返回path中的文件名
os.path.basename(path) 
# 获取当前工作目录,也就是在哪个目录下运行这个程序(慎用)
"""
在F:\aaa\bbb\ccc运行 python TestDir.py,输出F:\aaa\bbb\ccc
在F:\aaa\bbb运行 python ccc/TestDir.py,输出F:\aaa\bbb
在F:\aaa运行 python bbb/ccc/TestDir.py,输出F:\aaa
"""
os.getcwd()
   

3.添加其他目录进入sys.path中
3.1 将执行文件当前文件夹下的aa文件夹添加到sys.path中

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
ROOT_DIR = BASE_DIR
# os.path.join 把目录和文件名合成一个路径
sys.path.append(os.path.join(ROOT_DIR, 'aa'))
for i in sys.path:
	print(i)

3.2添加其他目录进入sys.path

在实际开发中,默认包含了当前目录为搜索路径,所以,
当前目录下的模块和子模块均可以正常访问。但是若一个模块需要import平级的不同目录的模块,或者上级目录里面的模块,就可以通过修改path来实现。

# 添加执行文件所在目录的上层目录进入sys.path
BASE_DIR = os.path.dirname(sys.path[0])
ROOT_DIR = BASE_DIR
sys.path.append(os.path.join(ROOT_DIR))
for i in sys.path:
    print(i)

几点小结

  • 对于一个纯Python的服务器项目

一般会写一个设置环境的shell脚本,去设置环境变量,后续便可以从该路径下开始import
该脚本一般会先获取当前目录,从而获取到工程目录脚本目录PROJECT_PATH,库目录LIB_PATH,公共目录COMMON_PATH,
从而可以将需要的目录都设置给PYTHONPATH,例如

export PYTHONPATH=${PROJECT_PATH}:${LIB_PATH}:${COMMON_PATH}:${PYTHONPATH}
  • 对于一个纯Python的客户端项目或者工具类项目

1.可以直接把工程文件夹复制到 site_packages目录下,虽然可以使用,不过这种方式不好。

2.使用 setup.py把项目安装在本地, 参考:Python 的 setup.py
安装项目, 然后把安装路径加入到环境变量中

# pip install 安装时的-v参数会输出安装的目录路径
py -3 -m pip install -e . -v
  • 纯模块的项目

每个模块可以独立运行的,可以每个模块从当前模块根目录开始import, 安装后每个模块根目录要添加到环境变量

  • 有一个启动入口的项目

每个模块可以从启动入口所在的目录开始 import 即可

一个工程示例

为了测试环境路径import,在gitee上提交了一个用于测试Python环境路径的工程示例:https://gitee.com/selfsongs/test_path
并在README.md中做了详细说明,该项目的setup.py中的packages字段用于指定对应的包,安装后所在的目录会被添加到环境变量中,我们在模块test_demo/module2/func2.py 需要import平级的不同目录的模块test_demo /module1/func1.py时,直接从test_demo开始即可

from test_demo.module1.func1 import func1

你可能感兴趣的:(Python,学习记录,python,学习)