gpt4 book ai didi

Python安装包名称冲突

转载 作者:行者123 更新时间:2023-12-04 16:57:04 30 4
gpt4 key购买 nike

我有一个看起来像这样的项目:

.
├── A
│   ├── setup.py
│   ├── __init__.py
│   ├── a.py
│   └── data.py
└── B
   ├── b.py
   └── data.py

我无法控制 A但我想在 B/b.py 内使用它.我无法重写文件夹中的任何代码 A (除了 setup.py )。

我试过这个:

# File A/setup.py
from setuptools import setup, find_packages
setup(name='packageA', version='1.0', packages=find_packages())

通过以下安装/测试:

$ cd B
$ pip install -e ../A
$ python -c "import a; print(a)"
<module 'a' from 'A/a.py'>
$ python -c "import data; print(data)"
<module 'data' from 'B/data.py'>
# How to get the same for <module 'data' from 'A/data.py'>?

名称冲突在这里困扰着我,我希望能够同时导入 A/data.pyB/data.pyb.py .我想知道是否有办法解决这个问题?

我希望能够写出类似的东西:

$ python -c "from A import data; print(data)"
<module 'data' from 'A/data.py'>

我试图拥有 setup.py上一级(在根目录中),但如果我这样做,那么我在 A 中遇到问题:

$ cd B
$ pip install -e ..
$ python -c "from A import data; print(data)"
Traceback (most recent call last):
File "A/data.py", line 1, in <module>
from a import some_function
ImportError: cannot import name 'some_function' from 'a' (unknown location)

如果我可以重写 A/data.py我可以这样做(但我不能):

from A.a import some_function

是否可以修改 setup.py封装 A在(假)模块名称下?欢迎任何解决方案。

最佳答案

多种可能的解决方案:

  • 将 A 作为包安装。 cd A && python3 setup.py install .
    大概这是一个可安装的包。现在您可以像通常预期的那样导入 A。
  • 将 A 添加到 PYTHONPATH .在 B 中编程时很有用但需要从A提取的信息.所以你可以修改 A 中的内容,例如调试消息并仍然让您的程序工作。 PYTHONPATH=/path/to/A python -c "import a; print(a)"
  • 您可以从父文件夹创建启动程序,像普通模块一样导入它们。确保您是 using relative imports .


  • $ cd B
    $ pip install -e ../A
    $ python -c "import a; print(a)"
    <module 'a' from 'A/a.py'>
    $ python -c "import data; print(data)"
    <module 'data' from 'B/data.py'>
    # How to get the same for <module 'data' from 'A/data.py'>?

    The name collision bothers me here, I would like to be able to import both A/data.py and B/data.py in b.py. I wanted to know if there is a way around this?

    I would like to be able to write something like:

    $ python -c "from A import data; print(data)"
    <module 'data' from 'A/data.py'>


    你做 from A import data .然后你有“ A/data.py”。如果发生名称冲突,您也可以执行 from a import data as newname .
    这假设您有 A作为python模块安装。 (无论是在 setup.py installpip install 还是将库添加到 PYTHONPATH 。)

    关于Python安装包名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60831086/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com