Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与普通脚本相比,在python包中导入_Python_Pip - Fatal编程技术网

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

与普通脚本相比,在python包中导入,python,pip,Python,Pip,我已经编写了一个小python代码,它解析文件中的数据,然后使用Selenium将数据输入到网站中,我正在尝试将其与脚本捆绑在一起 我已经能够将它捆绑到一个pip包中并上传它,但是当尝试运行它时,我得到了同一目录中没有模块名为“” 我的结构很简单 chessil_tourney_inserter/ setup.py chessil_tourney_inserter/ __init__.py (empty) chessil_tourney_inser

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

我已经能够将它捆绑到一个pip包中并上传它,但是当尝试运行它时,我得到了同一目录中没有模块名为“”

我的结构很简单

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\u line.main
只需调用
chessil\u tourney\u 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\u tourney\u inserter.py
,并且如果我将包名添加到导入中,它将中断
chessil\u tourney\u inserter.py


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

在顶部文件夹中添加
\uuu init\uuuuupy

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

有关更多信息,请参阅。

非常简单,工作非常完美。非常感谢。我读了init.py,但没有意识到它应该在目录之外。。。在我的搜索中,我发现从Python3开始,如果包名与目录匹配,即使没有init.py文件,它也会在其中搜索,这就是代码使用包名的原因吗?是的,我认为是这样。引入了这一变化。您使用的是哪一版本的Python?我目前使用的是3.4.2版
\uuuuu init\uuuuupy.py
不需要用于名称空间包<代码>命名空间包是那些只包含其他包的包。基本上,它们包含文件夹,但不包含文件。您有两个同名的包。您希望顶级文件夹chessil_tourney_inserter也成为一个包。由于它有一个文件
setup.py
,它是一个
常规的
包,因此需要一个
\uuuu init\uuuu.py
也请参见TL;DR
\uuuu init\uuuuu.py
对于
命名空间
包不是必需的,但是对于
常规
包是必需的