find_packages() 不包括主项目文件夹

find_packages() does not include main project folder

我无法排除 setup.py 文件中的文件。首先我展示一下项目结构。

myscript
├── myscript
│   ├── tests.py
│   └── myscript.py
├── README.md
├── LICENSE
└── setup.py

setup.py文件内容如下:

# -*- coding: utf-8 -*-
from setuptools import setup, find_packages

with open('README.md') as f:
    long_description = f.read()

setup(name = 'myscript',
    version = "1.0",
    description = 'Example desc',
    long_description = long_description,
    long_description_content_type = 'text/markdown; charset=UTF-8',
    license = 'MIT',
    author = 'Jalkhov',
    author_email = 'jalkhov@gmail.com',
    packages = find_packages('myscript', exclude=['tests.py']),   
    entry_points={
        'console_scripts': [
            'myscript=myscript.myscript:main',
        ],
},
)

当我 运行 python setup.py sdist 使用这样的文件,并安装它为我生成的 .tar.gz 文件时,它安装正确,但是当我尝试从控制台 运行 脚本时,它抛出以下错误:

File "C:\Users\myuser\AppData\Local\Programs\Python\Python37-32\Scripts\myscript.exe.main__.py", line 4, in <module>ModuleNotFoundError: No module named 'myscript'

然后我检查 site-packages 文件夹,我找到的唯一与脚本有关的是 myscript-1.0.dist-info 文件夹

但是当我修改包行并保留它时:

packages = ["myscript"],

然后我安装了,一切运行都很好,但是我要排除的文件已经包含在site-packages文件夹中。

似乎通过使用 find_packages 函数我不关心脚本的主文件夹。

似乎 myscript/myscript/__init__.py 文件丢失。

Anyway, find_packages() walks the target directory, filtering by inclusion patterns, and finds Python packages (any directory). Packages are only recognized if they include an __init__.py file. Finally, exclusion patterns are applied to remove matching packages.

-- setuptools documentation for find_packages

您实际上根本没有软件包,所以不要使用 find_packages。请改用 py_modules 来进行单文件分发。

推荐这样的项目布局:

myscript
├── LICENSE
├── README.md
├── myscript.py
├── setup.py
└── tests
    └── test_myscript.py

并像这样修改setup.py

setup(
    ...
    py_modules=["myscript"],
)