python - find_packages() 不包括主项目文件夹
问题描述
我在排除 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
功能,我并不关心脚本的主文件夹。
解决方案
你实际上根本没有包,所以不要使用find_packages
. 改为使用py_modules
,用于进行单文件分发。
推荐这样的项目布局:
myscript
├── LICENSE
├── README.md
├── myscript.py
├── setup.py
└── tests
└── test_myscript.py
并setup.py
像这样修改:
setup(
...
py_modules=["myscript"],
)
推荐阅读
- unity3d - 在 Unity 中使用 HiDPI 在 Mac 上获取 Retina 屏幕分辨率
- html - 调整窗口大小时将复选框位置保留在表单中
- nonlinear-optimization - R (NLOPTR - COBYLA) 非线性优化中的二元约束
- sql - 数据转换 Nvarchar 到 Money
- python - 文本分类 RNN - LSTM - 错误检查目标
- r - 过滤 R data.table 中的差异
- php - 在 aws 服务器上部署在 lumen 中创建的 api
- wordpress - 从 WordPress 管理仪表板的用户列表中隐藏具有特定角色的用户
- php - 如何在 mysqli bind_param 中使用 while(不适用于我的代码)?
- oracle - DBMS_OUTPUT.PUT_LINE 和 DBMS_OUTPUT.GET_LINE 使用 Liquibase