python学习中碰到的各种文件的路径的问题
python项目中有多层目录
├─run
│ main_run.py
│ __ init__.py
│
└─testpackage
│ mod.py
│ readme.txt
│ __ init __.py
mod内容为 def test():
print(“test”)
mark as
如果mark as testpackage为源码 root
在main_run里面
import的时候就可以
直接from mod import test
如果不标记为源码
那就需要
from testpacakage.mod import test
python -m
如果main_run里面 from testpackage.mod import test
E:\test>pipenv run python run/main_run.py
Traceback (most recent call last):
File “run/main_run.py”, line 2, in
from testpackage.mod import test
ModuleNotFoundError: No module named ‘testpackage’
找不到模块
这个时候用python -m
E:\test>pipenv run python -m run.main_run
就正常运行
还可以改造一下run文件
把
import sys
sys.path.append(“e:\test”)
放到from testoackage前面
再运行
E:\test>pipenv run python run/main_run.py
就没问题了
使用直接启动,还是以模块的启动,目的就是把import的那个模块的路径放到sys.path中
http://www.pythondoc.com/pythontutorial3/modules.html
模块中引用文件路径跟working directory的关系
引用文件路径要跟working directory是相对的关系
mainrun里面
path=“testpackage/readme.txt”
如果
working directory是e:\test
那么运行的时候
from os.path import isfile
print(isfile(path))
是True
如果working directory 是e:\test\run
那么是False
path="…/testpackage/readme.txt"
才是True
这个文件它就不会自己在sys.path里面寻找了。
改变当前运行的目录
main_run内容
path= “testpackage/readme.txt”
from os.path import isfile,dirname,abspath
from os import getcwd,chdir
print(isfile(path))
print(getcwd())
dir=dirname(getcwd())
chdir(dir)
print("***********")
print(getcwd())
print(isfile(path))
一开始workingdirectory目录是e:\test\run
结果
False
E:\test\run
E:\test
True
如果在
e:\test
结果
True
E:\test
E:
False
那么是True,False