与普通脚本相比,在python包中导入

时间:2015-09-04 13:55:12

标签: python pip

我编写了一个小的python代码,用于解析文件中的数据,然后使用Selenium将数据输入到网站中,我试图将其与脚本捆绑在一起。

我已经能够将它捆绑到一个pip包中并上传它,但是当我尝试运行它时,我得到同一目录下的模块的ImportError: No module named '<name>'

我的结构很简单

chessil_tourney_inserter/
    setup.py
    chessil_tourney_inserter/
        __init__.py (empty)
        chessil_tourney_inserter.py
        swiss98_text_parser.py
        command_line.py

setup.py也很基本:

from setuptools import setup

setup(name='chessil_tourney_inserter',
    .
    .
    .
    packages=['chessil_tourney_inserter'],
    zip_safe=False,

    install_requires = [
       'selenium'
    ],

    entry_points={
        'console_scripts': [
        'insertchessiltourney = chessil_tourney_inserter.command_line:main']
    })

截至目前command_line.main只需拨打chessil_tourney_inserter

import chessil_tourney_inserter.chessil_tourney_inserter as cti
import sys

def main():
    if len(sys.argv) == 1:
        print("Usage: chessil_tourney_inserter.py *tournament name*")
        exit()
    cti.main();

if __name__ == "__main__":
    main()

和chessil_tourney_inserter给我一个导入错误:

import swiss98_text_parser

但是如果我尝试直接运行chessil_tourney_inserter.py它就可以了,如果我将包名添加到导入,它将会中断chessil_tourney_inserter.py

那么我应该如何设置文件以便导入在我自己直接运行文件时以及当我尝试将其作为包导入或将其作为脚本运行时都能正常工作?

1 个答案:

答案 0 :(得分:1)

在顶部文件夹中添加__init__.py

chessil_tourney_inserter/
setup.py
__init__.py
chessil_tourney_inserter/
    __init__.py (empty)
    chessil_tourney_inserter.py
    swiss98_text_parser.py
    command_line.py

有关详细信息,请参阅What is __init__.py for?