簡體   English   中英

安裝的Python腳本無法導入包模塊

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

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