Setup.py 安装。未找到程序包初始化文件 'graph\__init__.py'(或不是常规文件)

Setup.py install. Package init file 'graph\__init__.py' not found (or not a regular file)

我的目录结构:

Projects/
|- VirtualEnv/
|- Graph/
   |- graph/
   |  |- __init__.py
   |  |- create_structure.py
   |- setup.py
   |- MANIFEST.in

setup.py:

from setuptools import setup, find_packages

import graph

if __name__ == "__main__":
    setup(
        name='MyGraph',
        version='1.0',
        packages = find_packages("graph"),
        entry_points={
            'console_scripts':
                ['start_graph = graph.create_structure:go']
            },
        install_requires = [
            "pandas>=0.25.1",
            "teradatasql>=16.20.0.50"
        ],
        include_package_data=True
    )

我创建了 virtualenv

virtualenv VirtualEnv/env

然后我通过

安装包
VirtualEnv/env/Scripts/python Graph/setup.py install

之后我激活了virtualenv

source VirtualEnv/env/Scripts/activate

和运行 "start_graph"(来自setup.py的命令)并得到

Traceback (most recent call last):
  File "D:\Developers\kdnikish\Projects\VirtualEnv\env\Scripts\start_graph-script.py", line 11, in <module>
    load_entry_point('MyGraph==1.0', 'console_scripts', 'start_graph')()
  File "D:\Developers\kdnikish\Projects\VirtualEnv\env\lib\site-packages\pkg_resources\__init__.py", line 489, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "D:\Developers\kdnikish\Projects\VirtualEnv\env\lib\site-packages\pkg_resources\__init__.py", line 2852, in load_entry_point
    return ep.load()
  File "D:\Developers\kdnikish\Projects\VirtualEnv\env\lib\site-packages\pkg_resources\__init__.py", line 2443, in load
    return self.resolve()
  File "D:\Developers\kdnikish\Projects\VirtualEnv\env\lib\site-packages\pkg_resources\__init__.py", line 2449, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
ModuleNotFoundError: No module named 'graph'

为什么不起作用?我的错误在哪里?

看起来罪魁祸首可能是 packages 参数。它可能应该是 packages=find_packages() 或更明确地说:packages=find_packages(src='.')。见 setuptools documentation on "Using find_packages()".

此外,执行时最好与安装脚本位于同一目录中:

cd Graph
../VirtualEnv/env/Scripts/python setup.py install

您也可以从您的 setup.py 中删除 import graph 指令,我认为没有任何必要,而且它通常迟早会中断。

然后为了调试,找到 MyGraph.egg-info 目录并查看 top_level.txtSOURCES.txt 文件。这些应该可以帮助您确定包装是否正确。