Tho*_*ind 6 python pip package python-3.x python-venv
由于导入问题,我已按照此处显示的步骤将我的 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)
UPDATE:如图这里和由@ 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 *
因为“myproject”列在pip?
Set*_*h P -1
如果您修改为,它可能会setup.py起作用
from setuptools import setup, find_packages
setup(name='myproject', version='1.0', packages=find_packages(where='myproject'))
然后,您可以pip install -e从根目录运行以可编辑模式安装包。
| 归档时间: | 
 | 
| 查看次数: | 1741 次 | 
| 最近记录: |