在 Python 中通过 setuptools 安装时如何使导入在控制台脚本中工作?
How to make imports works in a console script when installing by setuptools in Python?
通常我在 Python 中创建控制台脚本,但不使用设置工具。
现在我正在尝试使用 setuptools 自动管理本地安装并准备好分发。
我遇到了一个可能有点普通的问题,但在 Google.
中找不到任何东西
通常在运行一个带有python3 my_script.py
的控制台脚本中,并且有imports
个正常加载的语句。
但是用setuptools安装时,出现如下错误:
ModuleNotFoundError: No module named '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
)
以下是我本地 src
文件夹中 entry.py
文件的内容:
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!'
通常,我取消注释 entry.py
中的最后一个 main()
只是为了检查一切是否正常,然后 运行 在控制台 python3 entry.py
中输入脚本。这可确保我的脚本中的一切正常,并且不会抛出 ModuleNotFoundError
。
如何使 import 语句在 setuptools 安装的控制台脚本中工作?我错过了什么?
据我所知,我认为 src/entry.py
文件的第一行应该是:
from src.My_Object import My_Object
由于已安装,src
是包含 My_Object
模块的 顶级 包。
通常我在 Python 中创建控制台脚本,但不使用设置工具。 现在我正在尝试使用 setuptools 自动管理本地安装并准备好分发。
我遇到了一个可能有点普通的问题,但在 Google.
中找不到任何东西通常在运行一个带有python3 my_script.py
的控制台脚本中,并且有imports
个正常加载的语句。
但是用setuptools安装时,出现如下错误:
ModuleNotFoundError: No module named '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
)
以下是我本地 src
文件夹中 entry.py
文件的内容:
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!'
通常,我取消注释 entry.py
中的最后一个 main()
只是为了检查一切是否正常,然后 运行 在控制台 python3 entry.py
中输入脚本。这可确保我的脚本中的一切正常,并且不会抛出 ModuleNotFoundError
。
如何使 import 语句在 setuptools 安装的控制台脚本中工作?我错过了什么?
据我所知,我认为 src/entry.py
文件的第一行应该是:
from src.My_Object import My_Object
由于已安装,src
是包含 My_Object
模块的 顶级 包。