簡體   English   中英

Python - 從不是包的目錄導入模塊

[英]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

對於Python 3.x

請注意, 不推薦使用 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
  1. 將文件__init__.py添加dir1, dir2, dir3 ...
  2. 在包層次結構中, 使用兩個點

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

從父文件夾導入模塊

如何導入上面目錄中的Python類?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM