打包后,模块1无法从同一项目“导入模块2”

2024-09-30 08:32:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我的项目具有以下结构:

project/
  + setup.py
  + bobafett/
    + __init__.py
    + __main__.py
    + foo.py

与:

  • __init__.py:一个空文件
  • foo.py:包含bar的定义:
def bar():
    print("foo.bar()")
  • __main__.py导入和使用{}:
import foo
foo.bar()

✓ 在本地,一切都很好:

~/project $ python3 bobafett/__main__.py
foo.bar()

✗ 一旦bobafett被打包、发布和安装,就再也找不到foo

~/project $ python3 setup.py bdist_wheel
~/project $ curl -T ... https://my-pypi.example.com/simple/bobafett/...
~/project $ cd /tmp
/tmp $ pip --index-url https://my-pypi.example.com/simple --user bobafett
/tmp $ python -m bobafett
...
  File "/home/ysc/.local/lib/python3.6/site-packages/bobafett/__main__.py", line 1, in <module>
    import foo
ModuleNotFoundError: No module named 'foo'

怎么样?我可以写什么来代替import foo既可以在本地工作又可以在部署后工作?我需要改变我的项目结构吗


setup.py

from setuptools import setup

setup(
    name='bobafett',
    version='1.0.0',
    author='YSC',
    author_email='ysc@example.com',
    packages=['bobafett'],
    url='https:///my-pypi.example.com/simple/bobafett/',
    description='Prints "foo.bar()".',
)

Tags: pyhttpsimportprojectpypicomfoomain
1条回答
网友
1楼 · 发布于 2024-09-30 08:32:26

您可以执行以下操作:

  1. import foo更改为from . import foo。它将修复正在运行的python -m bobafett,但会中断python3 bobafett/__main__.py
  2. 以与打包时相同的方式在本地运行:python -m bobafett而不是python3 bobafett/__main__.py

相关问题 更多 >

    热门问题