![](/img/trans.png)
[英]How can I tell 'setup.py' to include files from my root directory for the built distribution?
[英]How can I get my setup.py to use a relative path to my files?
我正在嘗試使用distutils
構建一個Python發行版。 不幸的是,我的目錄結構如下所示:
/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',
)
當我運行python setup.py sdist
它正確生成清單文件,但不包括我在分發中的源文件。 顯然,它創建了一個包含源文件的目錄(即mypackage1
),然后將每個源文件復制到mypackage1/../mypackage
,這將它們放在分發之外 。
如何在不強制我的目錄結構符合distutils
期望的情況下更正此問題?
您希望在分發歸檔文件中使用什么目錄結構? 和你現有的結構一樣嗎?
您可以使用此修改后的setup.py打包一個目錄更高的內容(示例中的code
):
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']
)
你運行它(在code
目錄中):
python build/setup.py sdist
或者,如果你想在構建內部保持dist
:
python build/setup.py sdist --dist-dir build/dist
我喜歡你正在嘗試的目錄結構。 我從來沒有想過setup.py
特別適合保證在根代碼文件夾中。 但無論喜歡與否,我認為這是您的發行版用戶期望的結果。 因此,你必須欺騙distutils做其他事情也就不足為奇了。 data_files
參數是一個hack,可以讓你的setup.py進入你找到它的同一個地方。
從項目的根文件夾運行setup.py
在您的情況下,將setup.py放在代碼/
代碼/還應包括:
當您運行“setup.py sdist”時,它應該自動生成一個MANIFEST,包括: - 在py_modules和/或包中指定的任何文件 - setup.py - README.txt
要添加更多文件,只需手動編輯MANIFEST文件以包含項目所需的任何其他文件。
對於這個有點像樣的解釋, 請閱讀本文 。
查看工作示例簽出我的項目 。
注意:我沒有將MANIFEST置於版本控制之下,所以你不會在那里找到它。
是否可以先將其更改為父目錄?
import os
os.chdir(os.pardir)
from distutils.core import setup
等等
或者,如果你可能從任何地方運行它(這是矯枉過正,但......):
import os.path
my_path = os.path.abspath(__file__)
os.chdir(os.normpath(os.path.join(my_path, os.pardir)))
不確定這是否有效,但應該很容易嘗試。
也是一個蹩腳的解決方法,但構建項目內的包目錄的聯結/鏈接應該可以工作。
一個蹩腳的解決方法,但我可能只是使用一個Makefile,它將./mypackage發送到./build/mypackage,然后使用./build里面常用的distutils語法。 事實上,distutils希望將setup.py解壓縮到sdist的根目錄並在那里有代碼,所以你將有一段時間說服它做其他事情。
當你打掃干凈時,你可以隨時核對副本,這樣你就不必弄亂你的vcs了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.