Setuptools允许您列出可选功能的要求
# mypackage
'extras_require' : { 'PDF' : ['reportlab'], 'DOCX' : ['docxlib'] }
Run Code Online (Sandbox Code Playgroud)
另一个包可以指定'requires' : [ 'mypackage[PDF]' ].
如果另一个包想要从第一个包中需要多个额外的包,它可以要求'requires' : [ 'mypackage[PDF, DOCX]' ]吗?
如果我有以下C代码:
int main(int argc, char **arg)
{
int x = open("testfilefromc", O_RDWR | O_CREAT);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我编译和运行不合理时创建这个:
-rw-r----- 1 joewass staff 0B 31 Jan 21:17 testfilefromc
Run Code Online (Sandbox Code Playgroud)
但是下面的C代码,编译成Python模块:
const char *filename = "testfilefrompython";
context->fd = open(filename, O_RDWR | O_CREAT);
Run Code Online (Sandbox Code Playgroud)
做这个:
---------- 1 joewass staff 165B 31 Jan 21:09 testfilefrompython
Run Code Online (Sandbox Code Playgroud)
毫不奇怪,创建该文件的代码无法在下一轮打开它!
为什么文件会以零权限创建?为什么在编译成Python模块的C中行为会有所不同?我正在运行运行代码的python程序.
为了它的价值,我mmap稍后会把这个文件写进去.
谢谢!
乔
编辑:我知道我可以chmod解决这个问题,问题是为什么?
编辑2:感谢Rosh Oxymoron指出我错过了不那么可选的可选参数.TRWTF是第一个可行的例子!
我在 Mac OS X 版本 10.6 上使用 Python。我最近安装了最新的 Mac OS X 开发工具 SDK,其中包含 GCC。我拥有的 SDK 有:
$ ls /Developer/SDKs/
MacOSX10.4u.sdk MacOSX10.5.sdk MacOSX10.6.sdk
Run Code Online (Sandbox Code Playgroud)
每当我使用需要编译的“setup.py install”安装 python 包时,我想将 Mac OS X 10.6 与 Python/distutils 一起使用。
我注意到 Python 将 -isysroot 标志和路径传递给 Mac OS X 10.5(不是 10.6),即:
$ python-config --cflags --ldflags
-I/Library/Frameworks/EPD64.framework/Versions/7.0/include/python2.7 -I/Library/Frameworks/EPD64.framework/Versions/7.0/include/python2.7 -fno-strict-aliasing -fno-common -dynamic -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -DNDEBUG -g -O3 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -I/Library/Frameworks/EPD64.framework/Versions/7.0/include
-L/Library/Frameworks/EPD64.framework/Versions/7.0/lib/python2.7/config -ldl -framework CoreFoundation -lpython2.7 EPD64.framework/Versions/7.0/Python
Run Code Online (Sandbox Code Playgroud)
我该如何纠正这个问题?我希望它改用 10.6 SDK。
现在,当我在需要 C 编译的包上运行“python setup.py install”时,它会生成对 GCC …
我正在用这种布局做一个项目:
project/
bin/
my_bin.py
CHANGES.txt
docs/
LICENSE.txt
README.txt
MANIFEST.in
setup.py
project/
__init__.py
some_thing.py
default_data.json
other_datas/
default/
other_default_datas.json
Run Code Online (Sandbox Code Playgroud)
问题是,当我使用pip安装它时,它将"default_data.json"和"other_datas"文件夹放在与应用程序其余部分不在同一位置.
我怎么做让他们在同一个地方?
他们最终在"/home/user/.virtualenvs/proj-env/project"
而不是"/home/user/.virtualenvs/proj-env/lib/python2.6/site-packages/project"
在setup.py中,我这样做:
inside_dir = 'project'
data_folder= os.path.join(inside_dir,'other_datas')
data_files = [(inside_dir, [os.path.join(inside_dir,'default_data.json')])]
for dirpath, dirnames, filenames in os.walk(data_folder):
data_files.append([dirpath, [os.path.join(dirpath, f) for f in filenames]])
Run Code Online (Sandbox Code Playgroud) 我有一个我在Pypi注册的包裹.最近我做了一个更新,并希望从0.6.1增加版本 - > 0.7.0.现在,如果我跑,python setup.py sdist upload我得到一个错误:Upload failed (401): Incorrect password.
我以为我可能要再次注册但是会遇到类似的失败:
python setup.py register
...
Server response (401): basic auth failed
Run Code Online (Sandbox Code Playgroud)
在尝试注册时,它没有问我正常的问题:
We need to know who you are, so please choose either:
1. use your existing login,
2. register as a new user,
3. have the server generate a new password for you (and email it to you), or
4. quit
Run Code Online (Sandbox Code Playgroud)
我没有运气的文档或任何其他在线帮助.我希望我不需要再次注册包,但我无法弄清楚如何提供密码以便sdist upload工作.
我读过以下内容但没有成功:
http://guide.python-distribute.org/contributing.html
http://guide.python-distribute.org/quickstart.html
https://hynek.me/articles/sharing-your-labor-of-love-pypi-quick-and-dirty/
这非常有用,但仍然没有让我找到解决方案:
http://peterdowns.com/posts/first-time-with-pypi.html
有什么建议?
one_file.py包含一些通用函数、类和main().
我想使用pip调用该函数的命令行脚本来安装它main()。
什么是目录结构并且setup.py可以做到这一点?
我正在学习如何使用distutils,有些东西我不明白,我希望有人可以向我解释.
我已经成功创建了可以安装的tar.gz包
pip install mypackage.tar.gz
Run Code Online (Sandbox Code Playgroud)
我这样做setup.py,使用一个运行函数的简单脚本,setuptools.setup()我调用它python3 setup.py sdist.
我现在想学习的内容:如何在此构建扩展.
我的问题:我找不到任何全面的文本来解释如何pip install有一个build_ext类的包可以让它构建,然后安装.
如果我们看一下这个例子,对于着名的工具cx_freeze包,我们看到:
build_ext类build_extension()setup(),变量cmdclass,包含包含类的dictbuild_ext我的问题:cx_freeze构建扩展然后安装它的原因是什么?是否有足够的cmdclass定义build_ext来实现这一目标?
我正在尝试安装 subprocess32 python 模块(https://github.com/google/python-subprocess32),但 distutils 遇到一些问题。该模块包含必须构建的 C 扩展,但是当我运行 或 时,pip install .我python setup.py install得到以下输出:
...
creating build
creating build/temp.linux-x86_64-2.7
/non/existent/path/gcc -pthread -fPIC ... -c _posixsubprocess.c -o build/temp.linux-x86_64-2.7/_posixsubprocess.o
unable to execute '/non/existent/path/gcc': No such file or directory
Run Code Online (Sandbox Code Playgroud)
显然,由于某种原因,distutils 使用了错误的 gcc 路径。然后我尝试使用手动指定 gcc 的正确路径export CC=/correct/path/to/gcc,得到以下输出:
building '_posixsubprocess' extension
creating build/temp.linux-x86_64-2.7
/correct/path/to/gcc -fPIC -fno-strict-aliasing -g -O2 ... -c _posixsubprocess.c -o build/temp.linux-x86_64-2.7/_posixsubprocess.o
/non/existent/path/gcc -pthread -shared ... build/temp.linux-x86_64-2.7/_posixsubprocess.o -o build/lib.linux-x86_64-2.7/_posixsubprocess.so
unable to execute '/non/existent/path/gcc': No such file …Run Code Online (Sandbox Code Playgroud) distutils使用或编译 Python C-API 项目时setuptools,会产生未剥离的.so可执行文件,其大小要大得多。有没有一种方法可以轻松地剥离它们,而无需strip -s手动调用可执行文件?例如,有一个选项吗setup.py?
我正在尝试将一些 Python 代码转换为.exePyInstaller。我的代码使用 distutils,这在过去已经让我有些头疼,因为它似乎重复了 setuptools 的功能,并且与它的交互很奇怪。例如,它需要未使用的setuptools 导入才能正常工作,这对我来说似乎非常不Python。
我需要在我的项目中使用这两个包。我在订单中导入了两个包,import setuptools; import distutils因为另一个订单抛出了一个已经令人担忧的警告。
我的脚本运行良好,但在我将其转换为 exe 后,我在 setuptools 的可疑子模块内得到了回溯_distutils_hack。是的,它只是打印一个没有上下文的文件名。
Traceback (most recent call last):
<18 lines omitted>
File "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_module
File "_distutils_hack\override.py", line 71, in <module>
File "_distutils_hack\__init__.py", line 71, in do_override
File "_distutils_hack\__init__.py", line 59, in ensure_local_distutils
AssertionError: C:\Users\<omitted>\AppData\Local\Temp\_MEI294562\distutils\core.pyc
Run Code Online (Sandbox Code Playgroud)
我在用
Python 3.7.7 on win32(但我用 3.8、3.9 和 3.10 复制了它)pyinstaller==4.8(2022 年 1 月)Windows 版distutils==3.7.7(内置) …distutils ×10
python ×10
setuptools ×5
gcc ×2
pip ×2
c ×1
cpython ×1
data-files ×1
macos ×1
package ×1
pyinstaller ×1
pypi ×1
python-3.x ×1
setup.py ×1
unix ×1