簡體   English   中英

可安裝的distutils軟件包:如何從也是同一軟件包一部分的命令行腳本中導入軟件包模塊?

[英]Installable distutils packages: How do I import package modules from command line scripts which are also part of the same package?

我創建了一個Python包,其中包含純模塊和腳本,它們都在同一文件夾中。 這些腳本需要利用模塊中的功能,因此只需導入它們即可:

import *module*

我現在希望與其他人共享此軟件包,因此我已使用distutils將其轉換為可分發的軟件包。 按照distutils 文檔的說明,我已在包中的“ setup.py”中聲明了腳本文件,如下所示:

setup(...,
    scripts=['path/to/script/a', 'path/to/script/b']
    )

安裝此軟件包后,我注意到distutils已將命令行腳本的副本安裝到Python安裝中的“ Scripts”文件夾中。 一切都很好。 現在,如果我嘗試運行這些腳本中的任何一個,它將失敗並顯示:

ImportError: No module named *module*

大概是因為安裝后腳本和模塊之間的相對路徑已更改,因此無法再找到模塊。 所以我的問題是,您應該如何從同一軟件包中的腳本中導入模塊,以使其既可以與distutils捆綁在一起,又可以在安裝后使用?

現在,我可以通過修改模塊導入來輕松解決此問題,如下所示:

try:
    import *module*
except ImportError:
    from *package* import *module*

這似乎有點hack。 我在這里錯過了一個把戲嗎? 我希望distutils可以幫我解決這個問題。 有沒有更好,更強大的方法來處理此問題?

也許嘗試setuptools它有一個很好的自動創建主腳本的方法 簡短示例:

setup(
    # other arguments here...
    entry_points = {
        'console_scripts': [
            'foo = my_package.some_module:main_func',
            'bar = other_module:some_func',
        ],
        'gui_scripts': [
            'baz = my_package_gui.start_func',
        ]
    }
)

暫無
暫無

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

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