[英]Python — import a module from a directory that's not a package
我有這樣的目錄結構......
dir/
build.py
dir2
dir3/
packages.py
現在build.py
需要packages.py
- 並注意dir2
不是包。
那么將packages.py
加載到build.py
的最佳方法是什么(目錄結構無法更改)
編輯
sys.path.append
解決方案似乎很好 - 但有一點 - 我需要很少使用packages.py
文件 - 並保留一個包含很少使用的目錄的sys.path
,但是在前面 - 那是最好的嗎?
編輯二
我認為imp
解決方案是最好的。
import imp
packages = imp.load_source('packages', '/path/to/packages.py')
編輯III
請注意, 不推薦使用 imp.load_source
和其他一些函數。 所以你今天應該使用imp.load_module
。
fp, pathname, description = imp.find_module('packages', '/path/to/packages.py')
try:
mod = imp.load_module('packages', fp, pathname, description)
finally:
# since we may exit via an exception, close fp explicitly
if fp:
fp.close()
你可以這樣做:
sys.path.append('./dir2/dir3')
import packages
或者更好的是:
sys.path.append(os.path.join(os.path.dirname(__file__), 'dir2/dir3'))
import packages
或者(從這里開始: 如何在給定完整路徑的情況下導入模塊? )
import imp
packages = imp.load_source('packages', '/path/to/packages.py')
“一種正確的方式”是第三種嗎? - 避免直接與sys.path
混亂
我遇到了同樣的問題,我解決了。
dir/
build.py
dir2
dir3/
packages.py
__init__.py
添加到dir1, dir2, dir3 ...
bulid.py
想要導入packages.py
,寫入bulid.py:
import ..dir2.dir3.packages
from ..dir2.dir3.packages import function
https://docs.python.org/2/whatsnew/2.5.html#pep-328-absolute-and-relative-imports
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.