【问题标题】:pip installed module points to anaconda path rather than actual pathpip 安装的模块指向 anaconda 路径而不是实际路径
【发布时间】:2020-02-24 04:51:39
【问题描述】:

我在我的 git 存储库中有以下 python 模块,我在一个已经存在的 conda 环境中签出,我 pip install my_package 具有相同的名称 my_package

my_package
├── Makefile
├── data
├── my_package(renamed src so that I could import `my_package`)
│   ├── __init__.py
│   ├── config.py
│   ├── data
│   │   ├── __init__.py
│   │   ├── script.py
│   ├── utils.py
├── setup.py
├── test_environment.py
└── tox.ini

我在代码库之外有一个data 目录,我在其中保存我的数据,并希望使用相对路径在script.py 中访问它。

from pathlib import Path
my_path = Path(__file__).resolve().parent 
do something with my_path

问题是 my_path 返回我的 anaconda 路径,而不是文件的当前路径。

我尝试了pip install -e . my_packagepip install --install-options"--prefix=$(pwd)" my_package,但当我尝试在子my_package 目录中执行脚本时,这似乎不起作用。

如何让my_path 指向我的当前目录?

我的setup.py 看起来像这样。使用 python 3.7.3 和 Mac OSX

from pathlib import Path

setup(
    name="my_package",
    packages=find_packages(),
    version="0.2.0",
    description="",
    author="",
    license="",
    install_requires=[
        "numpy", "pandas", "pytest"
    ],
)

【问题讨论】:

  • 你考虑过使用os.getcwd()吗?或者这不适用于您的情况?
  • 我不想仅仅因为我可能从不同的目录执行它而执行 getcwd()。
  • 我做了一个pip install -e ./,这似乎有效。

标签: python python-3.x pip conda setuptools


【解决方案1】:

pip install -e ./

解决了我的问题

【讨论】:

    【解决方案2】:

    如果您想访问数据,那么最好将其作为您的包的一部分,请参阅setuptools documentation on "Including Data Files"

    原因是当您安装 Python 项目时,您对最终编写代码的确切位置没有太多控制权。通常,不属于 Python 包的文件根本不会与 Python 代码一起安装。所以您的代码无法访问您的数据。

    当您使用 editable (pip install -e .) 或 develop (./setup.py develop) 模式时,它确实有效,但更多的是巧合。因为代码并未实际安装(只是被指向),它在文件系统上的位置不会改变,它与数据的相对位置也不会改变。

    另一方面,如果您将数据与其余代码正确打包,那么它最终安装在哪里都没有关系,数据将与它一起安装。然后代码总能找到数据,请参阅importlib.resources 了解如何编写可以读取包数据的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 2018-03-30
      • 2021-05-19
      • 1970-01-01
      • 2012-05-14
      • 1970-01-01
      相关资源
      最近更新 更多