我在文件夹A中有一个main.py
脚本。现在,我使用单独的文件test.py
来测试结果,具体取决于测试元素。
我想在执行文件夹中使用test.py
,而不是在文件夹A中使用{<1}}。
main.py
:
def test():
classic way to test
if __name__ == '__main__':
prepare the test
test()
在main.py
中未知的文件夹中,想要一个文件test.py
:
def test():
specific test if I execute the script in this folder
我可以这样做吗?
答案 0 :(得分:1)
根据您的具体要求,您可以将test()
函数移动到另一个python文件,例如test.py
,然后将其导入为 -
from test import test
当python试图找到test.py
时,它会查询sys.path
(读取PYTHONPATH)列表,其中包含python将尝试找到test.py
的所有目录的列表。
现在运行脚本时,python会自动将当前目录(运行脚本的位置)作为sys.path的第一个元素附加(请注意,这不是脚本的位置,而是命令行中的位置/脚本运行的终端。)
然后是一些标准库以及PYTHONPATH中的信息。
举个例子,我在D:\\
的窗口中将我的PYTHONPATH变量设置为sys.path
,而D:\Python\test\shared
运行我的脚本时是['D:\\Python\\test\\shared', 'C:\\Python34\\lib\\site-packages\\setuptools-17.1.1-py3.4.egg', 'C:\\Python34\\lib\\site-packages\\openpyxl-2.2.4-py3.4.egg', 'D:\\', 'C:\\windows\\system32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages']
-
test.py
现在,当试图找到test.py
时,python将按顺序查看上面的列表(从第一个元素到最后一个元素)直到找到ImportError
,如果找不到则会抛出test.py
,如果发现它从它找到的第一个位置加载test.py
(它不会在以后的目录中搜索,如果它已被找到一次)。
因此,在您的情况下,您可以将经典PYTHONPATH
保留在某个公共位置,然后将该路径添加到test()
,然后当您想要更改test.py
函数的逻辑时,您可以使用包含新逻辑的test()
函数在当前目录中创建main.py
,并且当您在当前目录中存在test.py
以来运行test.py
时,加载(而不是其他PYTHONPATH
)
但是请注意你应该仔细处理这个,因为我看到很多人得到不同的错误,因为他们搞乱了他们的导入(有同名的多个文件),其中许多都出现在{{1}}变量