从其他地方导入本地安装的 python 包

Import locally installed python package from elsewhere

提问人:dasWesen 提问时间:11/3/2023 更新时间:11/3/2023 访问量:60

问:

关于Python打包的另一个愚蠢的问题。我已经搜索了stackoverflow,但找不到答案,或者,我找到的答案不起作用。

任务:从其他地方的另一个 .py 文件或命令行上的 python 加载本地安装的包(带或不带 -e 可编辑标志)。

设置:

test-proj1
└── run.py

test-proj2
├── setup.py
├── test-proj2
│   ├── proj2_functions.py
│   └── __init__.py
└── __init__.py

我在(顶层目录)中的 setup.py:test-proj2

from setuptools import setup, find_packages

setup(
    name="test_proj2",
    version="1.0.0",
    description="...",
    long_description="...description",
    long_description_content_type="text/markdown",
    package_dir={"": "test-proj2"},
    packages=find_packages(where="test-proj2"),
)

在(顶级目录)中,我已经运行了,或者(尝试了两个,都没有成功)。test-proj2python3 -m pip install .python3 -m pip install -e .

在此之后,从我正在使用的 virtualenv 中的 pip(也显示了正确的路径),将软件包显示为已安装。which pipwhich pythonpip freeze | grep test-

  • 从,或者只是在控制台中打开python,如何导入test-proj1/run.py

    a) 只是包裹(如果它是空的也没关系)?
    b) 中的函数?
    test_proj2addproj2_functions.py

我尝试将绝对路径添加到 Pythonpath,即使这样我也无法导入或.错误消息为:test-proj2test_proj2test_proj2.test_proj2

ModuleNotFoundError:没有名为“test_proj2”的模块


我的心智模型是,安装包,无论有没有 -e,都可以使用它来使用我在调用 .还是目录名称有问题?我读到它可以在导入时替换为(也可以使用各种其他等效名称)。python -m pip install ...--_

我现在会尝试不使用包,但我真的很烦恼,我无法让它运行。

pip 设置工具 python 打包

评论

2赞 AKX 11/3/2023
您需要以一种使它们成为有效 Python 标识符的方式命名 Python 模块和包,以便能够将它们与 一起使用。在我看来,你有;你不能做.(需要明确的是,您指定的 in 不会以任何方式影响导入。importtest-proj2import test-proj2name=setup.py
0赞 AKX 11/3/2023
“我读到过 - 在导入时可以用 _ 替换(也可以使用各种其他等效名称)。”你看错了。
0赞 AKX 11/3/2023
而且 - 对不起,垃圾评论 - 你不应该再使用了;例如,使用舱口setup.py
1赞 mijiturka 11/3/2023
当有人写可以替换为 时,他们可能意味着您需要重命名它,事情就会起作用,而不是 Python 自己弄清楚它。-_
2赞 phd 11/3/2023
@dasWesen 查看 stackoverflow.com/a/54599368/7976758

答: 暂无答案