由于导入问题,我已按照here所示的步骤将我的Python项目安装为可编辑的pip
软件包。基本上,这需要从我的项目根目录运行pip install -e .
。项目的名称为'myproject',setup.py
的配置如下:
from setuptools import setup, find_packages
setup(name='myproject', version='1.0', packages=find_packages())
项目结构如下:
.
├── myproject
│ ├── core
│ │ ├── core.py
│ │ └── __init__.py
│ └── tests
│ ├── __init__.py
│ └── test_one.py
├── setup.py
└── env
└── ...
激活venv
后,我得到以下输出:
(env) [root@localhost /]$ python -V
Python 3.6.3
(env) [root@localhost /]$ pip -V
pip 9.0.1 from /myproject/venv/lib64/python3.6/site-packages (python 3.6)
但是,在运行解释会话时,我会遇到以下情况:
(env) [root@localhost /]$ python
>>> import myproject
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'myproject'
>>> from myproject.core import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'myproject'
启动另一个解释性会话并自己运行setuptools
东西会导致:
(env) [root@localhost /]$ python
>>> from setuptools import find_packages
>>> find_packages()
>>> ['core', 'tests']
我还尝试了其他安装方法,包括:
python -m pip install -e .
仍然出现相同的问题。最后,我可以执行以下操作:
(env) [root@localhost /] pip list installed | grep myproject
myproject (1.0, /myproject)
更新:如here所示,并如下面的@ Fletchy1995所述,更改目录结构,使其类似于:
.
├── setup.py
├── myproject
│ ├── core
│ │ ├── core.py
│ │ └── __init__.py
│ └── tests
│ ├── __init__.py
│ └── test_one.py
├── __init__.py
└── env
└── ...
然后将setup.py
修改为:
from setuptools import setup
setup(name='myproject', version='1.0', packages=['myproject'])
从顶级目录运行pip install -e .
似乎已经解决了该问题。但是在以前的情况下,即使加载的软件包包括'myproject'的所有子软件包,为什么我仍然不能做类似的事情:
(env) [root@localhost /]$ python
>>> from myproject.core import *
在“ pip
中列出了'myproject'?