Python 将文件夹添加到系统路径以访问其他模块是否是一种恶意攻击?
我在包含脚本子目录的目录中有一个commands.py模块。我不想把它复制到每个包含我脚本的文件夹中。那是坏习惯吗Python 将文件夹添加到系统路径以访问其他模块是否是一种恶意攻击?,python,python-3.x,module,Python,Python 3.x,Module,我在包含脚本子目录的目录中有一个commands.py模块。我不想把它复制到每个包含我脚本的文件夹中。那是坏习惯吗 import sys sys.path.append("..") # add previous folder for run script sys.path.append(".") # add current folder if I run script in folder, that contain commands.py from commands import * 抱歉
import sys
sys.path.append("..") # add previous folder for run script
sys.path.append(".") # add current folder if I run script in folder, that contain commands.py
from commands import *
抱歉,英语不好。当前文件夹始终是
sys.path
中的第一个条目(从Python的路径生成角度来看,'='.
),因此在第二种情况下添加它是没有意义的
第一种情况的问题更大-首先,当前路径应该始终是第一个条目,因此如果您坚持将文件夹添加到sys.path
中,至少将它们插入索引1+
,或者更好,将您的路径附加到sys.path
的末尾,以确保所有内置和当前文件夹可见模块都可以从其预期位置访问
最后,由于不同的部分以不同的方式使用sys.path
作为其搜索路径,因此设置相对路径确实不是一个好主意。如果要硬编码父路径,请使用类似于os.path.realpath(“…”)
这都是在假设没有其他方法的情况下进行的-我仍然敦促您重新考虑您的设计,避免完全弄乱搜索路径。当前文件夹始终是
sys.path
中的第一个条目(从Python的路径生成角度来看'='.
),因此在第二种情况下添加它是毫无意义的
第一种情况的问题更大-首先,当前路径应该始终是第一个条目,因此如果您坚持将文件夹添加到sys.path
中,至少将它们插入索引1+
,或者更好,将您的路径附加到sys.path
的末尾,以确保所有内置和当前文件夹可见模块都可以从其预期位置访问
最后,由于不同的部分以不同的方式使用sys.path
作为其搜索路径,因此设置相对路径确实不是一个好主意。如果要硬编码父路径,请使用类似于os.path.realpath(“…”)
这一切都是在假设没有其他方法的情况下进行的-我仍然敦促您重新考虑您的设计,避免完全弄乱搜索路径。from..commands import*?Traceback(最后一次调用):File“somefile.py”,第14行,在from..commands import*ValueError中:尝试在顶级包之外进行相对导入ah,确定,因此您不在包的子文件夹中。那就别担心了。:)
from..commands import*
有什么问题?回溯(最近一次调用last):文件“somefile.py”,第14行,from..commands import*ValueError:尝试了超出顶级包的相对导入啊,好的,所以您不在包的子文件夹中。那就别担心了。:)如果我从包含commands.py的父目录启动脚本,它会给出ModuleNotFoundError,而不包含sys.path.append(“.”)
@EgorEgorov-您能否在问题中添加文件夹结构的ascii树,您从何处运行脚本,以及从何处导入commands.py
。我想我遗漏了一个谜题。如果我从父目录启动脚本,其中包含commands.py,它会给出ModuleNotFoundError,而不带sys.path.append(“.”)
@EgorEgorov-您能在问题中添加文件夹结构的ascii树吗,您从何处运行脚本,以及从何处导入commands.py
。我想我少了一块拼图。