给定文件的路径,我需要将包名传递给importlib.import_module()
,以便相对导入能够正常工作。我无法导入它,然后检查module.__package__
,因为它无法成功导入。
答案 0 :(得分:2)
这是一个相当通用的方法:
for ($i = 1; $i <= $_SESSION['ct']; $i++) {
$a = 'sec4_fieldname_' .$i;
$b = 'sec4_othername_' .$i;
$c = 'sec4_finalname_' .$i;
$_SESSION[$a] = $_REQUEST[$a];
$_SESSION[$b] = $_REQUEST[$b];
$_SESSION[$c] = $_REQUEST[$c];
}
unset($a,$b,$c,$i);
输出:
import pathlib
import sys
def get_module_name(path):
f = pathlib.Path(path).resolve()
for i in map(pathlib.Path, sys.path):
try:
f.relative_to(i)
except ValueError:
pass
else:
*parts, fname = f.relative_to(i).parts
return ".".join(parts), [f.stem]
module, fromlist = get_module_name("Programming/Python/kernprof.py")
print(module, fromlist)
imported_module = __import__(module, fromlist=fromlist)
print(imported_module)
print(getattr(imported_module, fromlist[0]))
此解决方案可以处理来自Programming.Python ['kernprof']
<module 'Programming.Python' (namespace)>
<module 'Programming.Python.kernprof' from '/home/matthew/Programming/Python/kernprof.py'>
的任何路径的导入,但无法执行相对导入(导入高于sys.path
)。有关sys.path
的使用方式,请参阅Why does Python's __import__ require fromlist?。
答案 1 :(得分:0)
这个助手怎么样?
import os
def get_parent_package(path):
parent_path = os.path.split(path)[0]
while parent_path != os.sep:
if '__init__.py' in os.listdir(parent_path):
return os.path.basename(parent_path)
parent_path = os.path.split(parent_path)[0]
return None
如果你在windows下,必须改进parent_path!= os.sep。