如何从内部运行导出的python包?

问题描述

我花了几天的时间来了解pip install的工作流程,现在我知道了列表中的主要问题,我面临着这个import的问题,我找不到解决方法

我有这个最小的可执行示例:

packagetest/
    __init__.py
    main.py
    aux.py
setup.py

aux.py

class Aux:
    def __init__(self,name):
        self.name = name

    def __str__(self):
        return self.name

main.py

from packagetest.aux import Aux

def printAux():
    print(Aux('aux1'))

if __name__ == "__main__":
    printAux()

setup.py

from setuptools import find_packages,setup

setup(
    name='packagetest',version='0.1',packages=find_packages(),)

就是这样。那是我的python包。 然后我运行pip install .,在另一个项目中,假设project2.py,我可以调用:

from packagetest import main

main.printAux()

这就是我的输出:

aux1

一切正常,除非并非如此。如果我运行pip uninstall packagetest,请进入我的packagetest/文件夹,然后尝试运行python main.py,我发现此错误:

Traceback (most recent call last):
  File "main.py",line 1,in <module>
    from packagetest.aux import Aux
ModuleNotFoundError: No module named 'packagetest'

那是因为当我使用packagetest导入时,我的packagetest尚未安装,并且python无法找到from packagetest.aux import Aux。如果我将其更改为from aux import Aux,则可以正常工作,但是在这种情况下,我将无法使用pip install导出该项目,因为aux将不会被识别为模块。我尝试过,并在project2.py上发现了另一个错误:

Traceback (most recent call last):
  File "project2.py",in <module>
    from packagetest import main
  File "/home/leonardo/.local/lib/python3.8/site-packages/packagetest/main.py",in <module>
    from aux import Aux
ModuleNotFoundError: No module named 'aux'

我的问题是如何在不安装我的项目的情况下使它可执行? 我希望导入在这两种情况下都有效,并且不希望我的模块仅在我的软件包安装在pip软件包中的情况下才可执行。我不会克隆回购协议并在新机器上执行项目,而不会被迫通过pip进行安装。

有可能吗?大型项目如何处理?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...