[英]Installed Python script cannot import package modules
我創建了一個具有以下目錄結構的Python包:
/
LICENSE
MANIFEST.IN
README.rst
VERSION
docs/
multitool/
__init__.py
core/
__init__.py
classes.py
utils.py
libs/
multitool.py
tests/
tools/
__init__.py
hashtool.py
webtool.py
setup.py
目標是通過將自己的文件添加到tools目錄來創建第三方可以添加的命令行應用程序(multitool.py)。 這是通過讓他們子類化我創建的類來實現的。 例如,這些是hashtool.py的前幾行:
import multitool
class HashTool(multitool.core.classes.CLITool):
只要我從項目目錄本身運行它,所有這些都可以工作:
$ ./multitool.py -h <---works
$ ./multitool/multitool.py -h <---works
當我嘗試創建並將其作為包安裝時,問題就出現了。 安裝運行並安裝腳本。 但是,當您運行該腳本時,它無法找到包中的任何模塊:
$ multitool.py
import core
ImportError: No module named core
我已經嘗試將導入更改為multitool,multitool.core,.multitool,.. multitool和其他具有相同結果的導入。
但是, 我能夠從Python解釋器做進口:
Type "help", "copyright", "credits" or "license" for more information.
>>> import multitool
>>> import multitool.core
>>> import multitool.core.classes
>>> from multitool import core
>>>
這是我的setup.py的相關部分
setup(
name = 'multitool',
version = __version__,
license = 'GPLv2',
packages = find_packages(exclude=['test/']),
scripts = ['multitool/multitool.py'],
include_package_data = True,
....
)
我究竟做錯了什么? 如何在我隨包安裝的腳本中導入我自己的代碼和tools目錄中的文件?
更新了 MrAlias編輯后的評論。 令人困惑的是,該腳本與包本身的名稱相同,並且不在單獨的目錄中。 將腳本移動到自己的bin /目錄解決了這個問題。
首先,當您安裝軟件包時,您正在導入核心而不確定它是多工具包的一部分。 所以:
import core
應該,
from multitool import core
這樣,解釋器就知道要從中導入核心的模塊。
[編輯]
至於已安裝軟件包的目錄結構,腳本需要進入與模塊本身不同的目錄。 顯示的目錄結構是Distutils的方式將您命名的腳本安裝到您的系統查找可執行文件的位置以及包本身中,這可能是所有混淆來自的地方。
import multitool class HashTool(multitool.core.classes.CLITool):
導入包不會導入其子包和子模塊。 試試這個:
import multitool.core.classes
class HashTool(multitool.core.classes.CLITool):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.