Python pip安装--可编辑:指向错误路径的链接
我已经使用setuptools一段时间了,最近使用pip为我的项目创建了发行版,所有这些都可以正常工作:“python setup.py sdist”、“python setup.py install”等命令都可以按配置工作。现在我想使用pip作为“可编辑”安装,以便在我对这个包进行维护时简化测试。所以我试过了Python pip安装--可编辑:指向错误路径的链接,python,installation,pip,Python,Installation,Pip,我已经使用setuptools一段时间了,最近使用pip为我的项目创建了发行版,所有这些都可以正常工作:“python setup.py sdist”、“python setup.py install”等命令都可以按配置工作。现在我想使用pip作为“可编辑”安装,以便在我对这个包进行维护时简化测试。所以我试过了 cd \ pip install -e .\mypackage 这会将路径c:\mypackage添加到c:\python27\Lib\site packages\easy-insta
cd \
pip install -e .\mypackage
这会将路径c:\mypackage添加到c:\python27\Lib\site packages\easy-install.pth。但是,在我的情况下,这是错误的,因为mypackage的结构如下:
C:\mypackage
setup.py
src
mypackage
__init__.py
...
docs
tests
所以easy-install.pth应该包含c:\mypackage\src,而不是c:\mypackage。我可以手动编辑easy-install.pth,将“\src”添加到添加的路径中,然后“import mypackage”成功,这是应该的。如果从c:\mypackage运行命令“python setup.py develope”,同样的问题也会发生,因此问题可能出现在setuptools级别
setup.py具有以下功能:
setup(
...
packages = find_packages('src'),
package_dir = {'mypackage': 'src/mypackage'},
...
)
(唯一的其他设置参数是文本项,如作者、版本等,未列出,因为与问题无关)
我不想在easy-install.pth中编辑路径。查看文档时,没有发现任何迹象表明将包源根目录放在与setup.py分开的文件夹中是一个问题。我做错了什么 我找到了答案。事实证明,这是在distutils级别(pip依赖于setuptools,而setuptools依赖于distutils)。讨论了package_dir参数的使用,指出“[如果]将所有Python源代码都保存在lib下,以便“根包”(即根本不在任何包中)中的模块位于lib中,而foo包中的模块位于lib/foo中”,那么您应该使用
setup(
...
packages = ['foo'],
package_dir = {'': 'lib'},
...
)
从OP中可以看出,我的情况确实如此,因此我改为:
setup(
...
packages = ['mypackage'],
package_dir = {'': 'src'},
...
)
这起作用了。那么问题是为什么
package_dir = {'': 'src'}
适用于发行版和可编辑安装,而
package_dir = {'mypackage': 'src/mypackage'}
适用于发行版,但不适用于可编辑安装
答案是默认情况下,distutils(以及setuptools和pip)希望发行版的“根”是包含setup.py的文件夹:任何要安装在站点包中的*.py和包文件夹都应该在那里;如果他们在别处,就必须告诉他们。这是通过在package_dir中有一个键为“”的条目来完成的。由于我的原始包_dir没有这个,distutils假定我的dist的根目录是包含setup.py的文件夹,这就是它指向可编辑安装的文件夹。发行版的安装工作正常,因为我看到的包_dir说mypackage/init.py在src/mypackage中,就是这样,所以对于“常规”发行版来说都工作正常 你有没有找到一个同时适用于这两种情况的配置?@SamuelHarmer在
适用于发行版和可编辑安装之前看到了代码是的。为第一次没有正确阅读而道歉。非常感谢。