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.
您实际上根本没有软件包,所以不要使用 find_packages
。请改用 py_modules
来进行单文件分发。
推荐这样的项目布局:
myscript
├── LICENSE
├── README.md
├── myscript.py
├── setup.py
└── tests
└── test_myscript.py
并像这样修改setup.py
:
setup(
...
py_modules=["myscript"],
)
我无法排除 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.
您实际上根本没有软件包,所以不要使用 find_packages
。请改用 py_modules
来进行单文件分发。
推荐这样的项目布局:
myscript
├── LICENSE
├── README.md
├── myscript.py
├── setup.py
└── tests
└── test_myscript.py
并像这样修改setup.py
:
setup(
...
py_modules=["myscript"],
)