Dro*_*ror 16 python python-2.7
我试图在python中设置一个包含子包的包.这是我目前的树形结构:
myPackage
??? __init__.py
??? mySubPackage1
? ??? foo2.py
? ??? foo.py
? ??? __init__.py
??? mySubPackage2
? ??? bar2.py
? ??? bar.py
? ??? __init__.py
??? setup.py
Run Code Online (Sandbox Code Playgroud)
一切__init__.py都是空的.这是我的setup.py:
from distutils.core import setup
if __name__ == "__main__":
setup(
name='myPackage',
package_dir = {
'mySubPackage1': 'mySubPackage1',
'mySubPackage2': 'mySubPackage2'},
packages=['mySubPackage1', 'mySubPackage2'],
)
Run Code Online (Sandbox Code Playgroud)
问题是,当我运行python setup.py install时myPackage,子包安装到dist-packages:
/usr/local/lib/python2.7/dist-packages/mySubPackage1
/usr/local/lib/python2.7/dist-packages/mySubPackage2
Run Code Online (Sandbox Code Playgroud)
我想问题是我的setup.py,但我不知道如何修复它?它应该在父目录中myPackage吗?如果是这样,那么当我将包打包成zip使用时它是如何工作的python setup.py sdist?
Max*_*ysh 28
只需使用setuptools而不是distutils,它find_packages完全是为了这个目的:
from setuptools import setup, find_packages
setup(
name='myPackage',
packages=find_packages(),
)
Run Code Online (Sandbox Code Playgroud)
Dro*_*ror 10
TL; DR:将包嵌入另一个具有相同名称的包中.
我将超级包嵌套myPackage在一个目录(具有相同名称)中,如下所示:
myPackage
??? myPackage
? ??? __init__.py
? ??? mySubPackage1
? ? ??? foo1.py
? ? ??? foo2.py
? ? ??? __init__.py
? ??? mySubPackage2
? ??? bar1.py
? ??? bar2.py
? ??? __init__.py
??? setup.py
Run Code Online (Sandbox Code Playgroud)
然后,我更新了setup.py:
from distutils.core import setup
if __name__ == "__main__":
setup(
name='myPackage',
package_dir = {
'myPackage': 'myPackage',
'myPackage.mySubPackage1': 'myPackage/mySubPackage1',
'myPackage.mySubPackage2': 'myPackage/mySubPackage2'},
packages=['myPackage', 'myPackage.mySubPackage1',
'myPackage.mySubPackage2']
)
Run Code Online (Sandbox Code Playgroud)
现在,sudo python setup.py install表现得像我期望的那样,并且dist-packages我有以下结构:
myPackage
??? __init__.py
??? __init__.pyc
??? mySubPackage1
? ??? foo1.py
? ??? foo1.pyc
? ??? foo2.py
? ??? foo2.pyc
? ??? __init__.py
? ??? __init__.pyc
??? mySubPackage2
??? bar1.py
??? bar1.pyc
??? bar2.py
??? bar2.pyc
??? __init__.py
??? __init__.pyc
Run Code Online (Sandbox Code Playgroud)
和一个鸡蛋文件.
这几乎是好的.现在它不是平台独立的,因为使用/.为了解决这个问题,我编辑setup.py如下:
from distutils.core import setup
from distutils import util
if __name__ == "__main__":
pathMySubPackage1 = util.convert_path('myPackage/mySubPackage1')
pathMySubPackage2 = util.convert_path('myPackage/mySubPackage2')
setup(
name='myPackage',
package_dir = {
'myPackage': 'myPackage',
'myPackage.mySubPackage1': pathMySubPackage1,
'myPackage.mySubPackage2': pathMySubPackage2},
packages=['myPackage', 'myPackage.mySubPackage1',
'myPackage.mySubPackage2']
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9607 次 |
| 最近记录: |