我正在尝试用它构建一个Python发行版distutils.不幸的是,我的目录结构如下所示:
/code
/mypackage
__init__.py
file1.py
file2.py
/subpackage
__init__.py
/build
setup.py
这是我的setup.py档案:
from distutils.core import setup
setup(
name = 'MyPackage',
description = 'This is my package',
packages = ['mypackage', 'mypackage.subpackage'],
package_dir = { 'mypackage' : '../mypackage' },
version = '1',
url = 'http://www.mypackage.org/',
author = 'Me',
author_email = 'me@here.com',
)
Run Code Online (Sandbox Code Playgroud)
当我python setup.py sdist正确运行它时会生成清单文件,但不会在分发中包含我的源文件.显然,它创建了一个包含源文件的目录(即mypackage1),然后复制每个源文件mypackage1/../mypackage,将它们放在分发之外.
如何在不强制我的目录结构符合distutils预期的情况下更正此问题?
您想要在分发存档文件中使用什么目录结构?与您现有的结构相同吗?
您可以code使用修改后的setup.py 将所有内容打包到更高的目录(在您的示例中):
from distutils.core import setup
setup(
name = 'MyPackage',
description = 'This is my package',
packages = ['mypackage', 'mypackage.subpackage'],
version = '1',
url = 'http://www.mypackage.org/',
author = 'Me',
author_email = 'me@here.com',
script_name = './build/setup.py',
data_files = ['./build/setup.py']
)
Run Code Online (Sandbox Code Playgroud)
您将运行此命令(在code目录中):
python build/setup.py sdist
Run Code Online (Sandbox Code Playgroud)
或者,如果您想保留dist内部版本:
python build/setup.py sdist --dist-dir build/dist
Run Code Online (Sandbox Code Playgroud)
我喜欢您想要的目录结构。我从来没有想过setup.py足以保证它位于根代码文件夹中。但是,不管您喜欢与否,我认为这是您的发行版用户所期望的。因此,您必须欺骗distutils做其他事情也就不足为奇了。该data_files参数是一种hack,可以将setup.py放入与您位于同一位置的发行版中。
一个有点蹩脚的解决方法,但我可能只是使用一个将 ./mypackage 同步到 ./build/mypackage 的 Makefile,然后使用 ./build 内部的常用 distutils 语法。事实上,distutils 期望将 setup.py 解压到 sdist 的根目录中,并在其中包含代码,因此您将需要花费大量的时间来说服它不这样做。
当你进行清理时,你总是可以对副本进行核武器攻击,这样你就不必弄乱你的VC。
| 归档时间: |
|
| 查看次数: |
11223 次 |
| 最近记录: |