python - 在 Python 中通过 setuptools 安装时如何使导入在控制台脚本中工作?
问题描述
通常我在 Python 中创建控制台脚本,但不使用设置工具。现在我正在尝试使用 setuptools 自动管理本地安装并使其准备好分发。
我偶然发现了一个可能有点普通的问题,但在 Google 中找不到任何内容。
通常在运行带有 的控制台脚本时python3 my_script.py
,imports
通常会加载一些语句。
但是通过 setuptools 安装时,出现以下错误:
ModuleNotFoundError:没有名为“My_Object”的模块
...如果我尝试在本地导入一个名为My_Object
.
setuptools 不应该还安装模块依赖项以使脚本正常工作吗?还是安装文件中缺少某些内容?
这是我setup.py
在项目根目录中的文件内容:
from setuptools import setup
VERSION = '0.0.1'
def readme():
with open('README.md') as f:
return f.read()
setup(
name='object-test',
version=VERSION,
description="Test setup script",
long_description_content_type="text/markdown",
long_description=readme(),
keywords="Testing import in installation",
author="Danilo Silva",
author_email="contact@danilocgsilva.me",
packages=["src"],
entry_points={"console_scripts": ["importtest=src.entry:main"],},
include_package_data=True
)
以下是entry.py
我本地src
文件夹中文件的内容:
from My_Object import My_Object
def main():
print("Hello! This is just an application test for importing")
my_object = My_Object()
print(my_object.main())
# main()
和My_Object.py
文件,也在src
文件夹内:
class My_Object:
def main(self):
return 'Hello! And this is the imported output!'
通常,我取消注释最后一个只是main()
为了entry.py
检查一切是否正常,然后运行在控制台中输入的脚本python3 entry.py
。这确保了我的脚本中的一切都正常并且没有ModuleNotFoundError
抛出。
如何使导入语句在 setuptools 安装的控制台脚本中工作?我错过了什么?
解决方案
据我所知,我相信src/entry.py
文件的第一行应该是:
from src.My_Object import My_Object
因为它是设置的,src
是包含模块的顶级包。My_Object
推荐阅读
- jquery - 如何使用 AJAX JSON 响应响应 CanCan::AccessDenied?
- ibm-cloud - 是否可以在 IBM Watson Chatbot 中输出谷歌搜索结果?
- xml - 使用 XSLT 在 XML 中查找节点值并创建新节点
- node.js - 打字稿错误:TS2339:“字符串”类型上不存在属性“地图”
- javascript - 需要一些帮助来理解 Promise 的用处和意义
- bluetooth - 我可以使用树莓派 3 使用 HID 配置文件通过蓝牙发送实时传感器数据吗?
- python - 以与使用元组相同的方式使用 ndarray 进行索引
- spring-boot - Liquibase Gradle 插件的 url 和 referenceUrl 似乎颠倒了
- react-native - 安全密码字段在发布时不受保护
- c++ - 定义子类构造函数时使用花括号调用基类构造函数?